这听起来很容易,我不知道怎么做。
我有numpy 2d数组
X = (1783,30)
字符串
我想把它们分成64个一批。我这样写代码。
batches = abs(len(X) / BATCH_SIZE ) + 1 // It gives 28
型
我尝试批量预测结果。所以我用零填充批次,并用预测结果覆盖它们。
predicted = []
for b in xrange(batches):
data4D = np.zeros([BATCH_SIZE,1,96,96]) #create 4D array, first value is batch_size, last number of inputs
data4DL = np.zeros([BATCH_SIZE,1,1,1]) # need to create 4D array as output, first value is batch_size, last number of outputs
data4D[0:BATCH_SIZE,:] = X[b*BATCH_SIZE:b*BATCH_SIZE+BATCH_SIZE,:] # fill value of input xtrain
#predict
#print [(k, v[0].data.shape) for k, v in net.params.items()]
net.set_input_arrays(data4D.astype(np.float32),data4DL.astype(np.float32))
pred = net.forward()
print 'batch ', b
predicted.append(pred['ip1'])
print 'Total in Batches ', data4D.shape, batches
print 'Final Output: ', predicted
型
但是在最后一批28号中,只有55个元素而不是64个(总共1783个元素),并且它给出了
第一个月
这是怎么回事?
PS:网络预测需要准确的批量大小是64来预测。
5条答案
按热度按时间rjzwgtxy1#
我也不太明白你的问题,尤其是X是什么样子的。如果你想创建数组大小相等的子组,试试这个:
字符串
u5i3ibmn2#
我发现了一个简单的方法来解决批量问题,通过生成虚拟对象,然后填充必要的数据。
字符串
这段代码将准确地加载64批大小的数据。最后一批将在末尾有虚拟零,但这没关系:)
型
最后我从28*64的总数中切出1783个元素。这对我很有效,但我相信有很多方法。
ht4b089n3#
从Python 3.12开始可以使用
itertools.batched
函数。对于较旧的Python版本,或者如果你正在处理numpy数组,你可以使用np.reshape来批处理数组。
假设你有
batch_size=2
,然后在整形时使用批量大小作为第二维。字符串
第一个维度是“批量”,第二个维度是batch_size。您可以忽略它,它将提供给予连续的批次。
如果你有多维数组,比如:
型
您可以再次使用第二维进行批处理:
型
注意,这需要第一个维度可以被batch_size整除,所以要么去掉余数(例如
array_2d[:len(array_2d) // batch_size * batch_size]
),要么用零填充(参见np.pad)。i2byvkas4#
这可以使用numpy的
as_strided
来实现。字符串
vcirk6k65#
data4D[0:BATCH_SIZE,:]
应该是data4D[b*BATCH_SIZE:b*BATCH_SIZE+BATCH_SIZE, :]
。