在 Caffe 中使用 Memory DataLayer 可以得到 "data_ MemoryDataLayer needs to be initalized by calling Reset"
Using Memory DataLayer in Caffe gives "data_ MemoryDataLayer needs to be initalized by calling Reset"
我计划在 caffe
中进行实时增强。这些是我到目前为止采取的步骤:
1.Replace Data
层 MemoryData
在网络中:
name: "test_network"
layer {
name: "cifar"
type: "MemoryData"
top: "data"
top: "label"
include {
phase: TRAIN
}
memory_data_param {
batch_size: 32
channels: 3
height: 32
width: 32
}
}
layer {
name: "cifar"
type: "MemoryData"
top: "data"
top: "label"
include {
phase: TEST
}
memory_data_param {
batch_size: 32
channels: 3
height: 32
width: 32
}
}
这是训练代码:
caffe.set_mode_gpu()
maxIter = 100
batch_size = 32
j = 0
for i in range(maxIter):
#fetch images
batch = seq.augment_images(np.transpose(data_train[j: j+batch_size],(0,2,3,1)))
print('batch-{0}-{1}'.format(j,j+batch_size))
#set input and solve
batch = batch.reshape(-1,3,32,32).astype(np.float32)
net.set_input_arrays(batch, label_train[j: j+batch_size].astype(np.float32))
j = j + batch_size + 1
solver.step(1)
但是当代码到达 net.set_input_arrays() 时,它崩溃并出现此错误:
W0405 20:53:19.679730 4640 memory_data_layer.cpp:90] MemoryData does not transform array data on Reset()
I0405 20:53:19.713727 4640 solver.cpp:337] Iteration 0, Testing net (#0)
I0405 20:53:19.719229 4640 net.cpp:685] Ignoring source layer accuracy_training
F0405 20:53:19.719229 4640 memory_data_layer.cpp:110] Check failed: data_ MemoryDataLayer needs to be initalized by calling Reset
*** Check failure stack trace: ***
我找不到 reset() 方法,我该怎么办?
Caffe
中的 MemoryDataLayer
似乎不适合通过 pycaffe
界面使用。
Yeah it's discouraged to use the MemoryDataLayer in Python. Using it
also transfers memory ownership from Python to C++ with the Boost
bindings and therefore causes memory leaks. Memory will only be
released after the network object is destructed in python. So if
you're training a network for a long time, you'll run out of memory.
It's encouraged to use InputLayer instead, where you can just assign
data from a numpy array into the memory blobs.
Link
至于解决方案, 将是不错的选择。
我计划在 caffe
中进行实时增强。这些是我到目前为止采取的步骤:
1.Replace Data
层 MemoryData
在网络中:
name: "test_network"
layer {
name: "cifar"
type: "MemoryData"
top: "data"
top: "label"
include {
phase: TRAIN
}
memory_data_param {
batch_size: 32
channels: 3
height: 32
width: 32
}
}
layer {
name: "cifar"
type: "MemoryData"
top: "data"
top: "label"
include {
phase: TEST
}
memory_data_param {
batch_size: 32
channels: 3
height: 32
width: 32
}
}
这是训练代码:
caffe.set_mode_gpu()
maxIter = 100
batch_size = 32
j = 0
for i in range(maxIter):
#fetch images
batch = seq.augment_images(np.transpose(data_train[j: j+batch_size],(0,2,3,1)))
print('batch-{0}-{1}'.format(j,j+batch_size))
#set input and solve
batch = batch.reshape(-1,3,32,32).astype(np.float32)
net.set_input_arrays(batch, label_train[j: j+batch_size].astype(np.float32))
j = j + batch_size + 1
solver.step(1)
但是当代码到达 net.set_input_arrays() 时,它崩溃并出现此错误:
W0405 20:53:19.679730 4640 memory_data_layer.cpp:90] MemoryData does not transform array data on Reset()
I0405 20:53:19.713727 4640 solver.cpp:337] Iteration 0, Testing net (#0)
I0405 20:53:19.719229 4640 net.cpp:685] Ignoring source layer accuracy_training
F0405 20:53:19.719229 4640 memory_data_layer.cpp:110] Check failed: data_ MemoryDataLayer needs to be initalized by calling Reset
*** Check failure stack trace: ***
我找不到 reset() 方法,我该怎么办?
Caffe
中的 MemoryDataLayer
似乎不适合通过 pycaffe
界面使用。
Yeah it's discouraged to use the MemoryDataLayer in Python. Using it also transfers memory ownership from Python to C++ with the Boost bindings and therefore causes memory leaks. Memory will only be released after the network object is destructed in python. So if you're training a network for a long time, you'll run out of memory. It's encouraged to use InputLayer instead, where you can just assign data from a numpy array into the memory blobs.
Link
至于解决方案,