图片分类出错
Created by: zhenghl1
我使用当前的docker 1.3 版本,运行图片分类示例,出现错误: 代码:
from __future__ import print_function
import paddle
import paddle.fluid as fluid
import numpy
import sys
def vgg_bn_drop(input):
def conv_block(ipt, num_filter, groups, dropouts):
return fluid.nets.img_conv_group(
input=ipt,
pool_size=2,
pool_stride=2,
conv_num_filter=[num_filter] * groups,
conv_filter_size=3,
conv_act='relu',
conv_with_batchnorm=True,
conv_batchnorm_drop_rate=dropouts,
pool_type='max')
conv1=conv_block(input,64,2,[0.3,0])
conv2=conv_block(conv1,128,2,[0.4,0])
conv3=conv_block(conv2,256,3,[0.4,0.4,0])
conv4=conv_block(conv3,512,3,[0.4,0.4,0])
conv5=conv_block(conv4,512,3,[0.4,0.4,0])
drop = fluid.layers.dropout(x=conv5, dropout_prob=0.5)
fc1= fluid.layers.fc(input=drop,size=512,act=None)
bn=fluid.layers.batch_norm(input=fc1,act='relu')
drop2 = fluid.layers.dropout(x=bn, dropout_prob=0.5)
fc2= fluid.layers.fc(input=drop2,size=512,act=None)
predict=fluid.layers.fc(input=fc2,size=10,act='softmax')
return predict
def conv_bn_layer(input, ch_out, filter_size, stride, padding, act='relu', bias_attr=False):
tmp=fluid.layers.conv2d(input=input, filter_size=filter_size, num_filters=ch_out, stride=stride, padding=padding, act=None, bias_attr=bias_attr )
return fluid.layers.batch_norm(input=tmp,act=act)
def shortcut(input,ch_in,ch_out,stride):
if ch_in != ch_out:
return conv_bn_layer(input,ch_out,1,stride,0, None)
else:
return input
def basicblock(input, ch_in, ch_out, stride):
tmp = conv_bn_layer(input, ch_out, 3, stride, 1)
tmp1= conv_bn_layer(tmp, ch_out, 3,stride,1)
short=shortcut(input, ch_in,ch_out,stride)
return fluid.layers.elementwise_add(x=tmp1,y=short,act='relu')
def layer_warp(block_func,input,ch_in,ch_out,count,stride):
tmp=block_func(input, ch_in,ch_out,stride)
for i in range(1,count):
tmp=block_func(tmp,ch_out,ch_out,1)
return tmp
def resnet_cifar10(ipt,depth=32):
assert(depth-2)%6==0
n=(depth-2)//6
nStages={16,64,128}
conv1=conv_bn_layer(ipt,ch_out=16,filter_size=3,stride=1,padding=1)
res1=layer_warp(basicblock,conv1,16,16,n,1)
res2=layer_warp(basicblock,res1,16,32,n,2)
res3=layer_warp(basicblock,res2,32,64,n,2)
pool=fluid.layers.pool2d(input=res3, pool_size=4, pool_type='max', pool_stride=1, global_pooling=False)
predict=fluid.layers.fc(input=pool,size=10,act='softmax')
return predict
def inference_program():
data_shape=[3,32,32]
images=fluid.layers.data(name='pixel',shape=data_shape,dtype='float32')
predict=resnet_cifar10(images,32)
#predict=vgg_bn_drop(images)
return predict
Train Program Config
CODE COPY FROM README
def train_program():
predict=inference_program()
label=fluid.layers.data(name='label',shape=[1],dtype='int64')
cost=fluid.layers.cross_entropy(input=predict,label=label)
avg_cost=fluid.layers.mean(cost)
accuracy=fluid.layers.accuracy(input=predict,label=label )
return [avg_cost,accuracy]
def optimizer_program():
return fluid.optimizer.Adam(learning_rate=0.001)
BATCH_SIZE=128
print(BATCH_SIZE)
train_reader=paddle.batch( paddle.reader.shuffle(paddle.dataset.cifar.train10(),buf_size=50000),batch_size=BATCH_SIZE )
test_reader=paddle.batch(paddle.dataset.cifar.test10(),batch_size=BATCH_SIZE)
use_cuda = False
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()
feeder_order=['pixel','label']
main_program=fluid.default_main_program()
star_program=fluid.default_startup_program()
avg_cost,acc=train_program()
test_program=main_program.clone(for_test=True)
optimizer = optimizer_program()
optimizer.minimize(avg_cost)
exe=fluid.Executor(place)
EPOCH_NUM =2
# for traning test cost
def train_test(program,reader):
count = 0
feed_var_list = [
program.global_block().var(var_name) for var_name in feed_order
]
feeder_test = fluid.DataFeeder(
feed_list=feed_var_list, place=place)
test_exe = fluid.Executor(place)
accumulated = len([avg_cost, acc]) * [0]
for tid, test_data in enumerate(reader()):
avg_cost_np = test_exe.run(program=program,
feed=feeder_test.feed(test_data),
fetch_list=[avg_cost, acc])
accumulated = [x[0] + x[1][0] for x in zip(accumulated, avg_cost_np)]
count += 1
return [x / count for x in accumulated]
params_dirname = "image_classification_resnet.inference.model"
def train_loop():
feed_var_list_loop = [main_program.global_block().var(var_name) for var_name in feeder_order]
feeder = fluid.DataFeeder( feed_list=feed_var_list_loop, place=place )
exe.run(star_program)
step=0
for pass_id in range( EPOCH_NUM ):
for step_id,data_train in enumerate( train_reader() ):
avg_loss_value = exe.run(main_program, feed=feeder.feed(data_train), fetch_list=[avg_cost, acc])
if step%1 == 0:
print("step:")
print(step)
print(avg_cost)
step += 1
avg_cost_test, accuracy_test = train_test(test_program, reader=test_reader)
if params_dirname is not None:
fluid.io.save_inference_model(params_dirname,["pixel"],[predict], exe)
train_loop()
报错: File "paddle_iamgeclassify.py", line 95, in avg_cost,acc=train_program() File "paddle_iamgeclassify.py", line 75, in train_program predict=inference_program() File "paddle_iamgeclassify.py", line 69, in inference_program predict=resnet_cifar10(images,32) File "paddle_iamgeclassify.py", line 62, in resnet_cifar10 pool=fluid.layers.pool2d(input=res3, pool_size=4, pool_type='max', pool_stride=1, global_pooling=False) File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/layers/nn.py", line 2383, in pool2d "exclusive": exclusive, File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/layer_helper.py", line 50, in append_op return self.main_program.current_block().append_op(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/framework.py", line 1208, in append_op op = Operator(block=self, desc=op_desc, *args, kwargs) File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/framework.py", line 657, in init self.desc.infer_shape(self.block.desc) paddle.fluid.core.EnforceNotMet: Due to the settings of padding(0), filter_size(4) and stride(1), the output size is less than 0, please check again. Input_size:2 at [/paddle/paddle/fluid/operators/pool_op.cc:39] PaddlePaddle Call Stacks: 0 0x7f8971787a96p paddle::platform::EnforceNotMet::EnforceNotMet(std::__exception_ptr::exception_ptr, char const, int) + 486 1 0x7f8971dcef1cp paddle::operators::PoolOutputSize(int, int, int, int, bool) + 252 2 0x7f8971dd1e81p paddle::operators::PoolOp::InferShape(paddle::framework::InferShapeContext) const + 1537 3 0x7f897183c376p paddle::framework::OpDesc::InferShape(paddle::framework::BlockDesc const&) const + 902 4 0x7f89717f054cp 5 0x7f89717c18d0p 6 0x4c5326p PyEval_EvalFrameEx + 37958 7 0x4b9b66p PyEval_EvalCodeEx + 774 8 0x4d57a3p 9 0x4eef5ep 10 0x4eeb66p 11 0x4aaafbp 12 0x4a587ep PyObject_Call + 62 13 0x4be51ep PyEval_EvalFrameEx + 9790 14 0x4b9b66p PyEval_EvalCodeEx + 774 15 0x4d57a3p 16 0x4a587ep PyObject_Call + 62 17 0x4be51ep PyEval_EvalFrameEx + 9790 18 0x4b9b66p PyEval_EvalCodeEx + 774 19 0x4c1f56p PyEval_EvalFrameEx + 24694 20 0x4b9b66p PyEval_EvalCodeEx + 774 21 0x4c17c6p PyEval_EvalFrameEx + 22758 22 0x4b9b66p PyEval_EvalCodeEx + 774 23 0x4c17c6p PyEval_EvalFrameEx + 22758 24 0x4b9b66p PyEval_EvalCodeEx + 774 25 0x4c1f56p PyEval_EvalFrameEx + 24694 26 0x4b9b66p PyEval_EvalCodeEx + 774 27 0x4c1f56p PyEval_EvalFrameEx + 24694 28 0x4b9b66p PyEval_EvalCodeEx + 774 29 0x4eb69fp 30 0x4e58f2p PyRun_FileExFlags + 130 31 0x4e41a6p PyRun_SimpleFileExFlags + 390 32 0x4938cep Py_Main + 1358 33 0x7f8a4d522830p __libc_start_main + 240 34 0x493299p _start + 41
在我学习语义角色标注的示例时出现con1105 模块不存在的情况