也许有一些方法可以摆脱avg_pool层?我找不到解决方法:(
SAMPLE_SHAPE = (32,32,3)
def generate_model(sample_shape):
inp = Input(shape=sample_shape)
resnet = resnet50.ResNet50(weights="imagenet",include_top=False)
x = resnet(inp)
predictions = Dense(2, activation='softmax')(x)
m = Model(inputs=inp, outputs=predictions)
#model.add(Dense(2, activation='softmax'))
# This creates a model
#predictions = Dense(2, activation='softmax')(x)
return m
model = generate_model(SAMPLE_SHAPE)
错误:InvalidArgumentError追溯(大多数 最近通话结束) 〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py在 _create_c_op(图形,node_def,输入,control_inputs)1566尝试: -> 1567 c_op = c_api.TF_FinishOperation(op_desc)1568除了errors.InvalidArgumentError为e:
InvalidArgumentError:负尺寸大小减去7 从1开始为'resnet50_14 / avg_pool / AvgPool'(op:'AvgPool')输入 形状:[?, 1,1,2048]。
在处理上述异常期间,发生了另一个异常:
ValueError跟踪(最近的呼叫 最后)在() 15#预测=密集(2,激活='softmax')[x) 16返回米 ---> 17个模型= generate_model(SAMPLE_SHAPE)
在generate_model(sample_shape)中 7 inp =输入(shape = sample_shape) 8 resnet = resnet50.ResNet50(weights =“ imagenet”,include_top = False) ----> 9 x = resnet(inp) 10个预测=密集(2,激活='softmax')[x) 11
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py在 通话(自己,输入内容,**) 552 553#实际调用该图层,收集输出,蒙版和形状。 -> 554输出= self.call(输入,** kwargs) 第555章 556
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py in call(self, 输入,掩码)1988返回 self._output_tensor_cache [cache_key] 1989其他: -> 1990 output_tensors,_,_ = self.run_internal_graph(inputs,masks)1991返回 output_tensors 1992
〜\ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py在 run_internal_graph(自己,输入,掩码)2138
如果'mask'不在kwargs中:2139
kwargs ['mask'] =计算掩码 -> 2140 output_tensors = _to_list(layer.call(computed_tensor,** kwargs))2141 output_masks = _to_list(layer.compute_mask(computed_tensor,2142
计算掩码))〜\ Anaconda3 \ lib \ site-packages \ keras \ layers \ pooling.py在通话中(self, 输入) 152 strides = self.strides, 153 padding = self.padding, -> 154 data_format = self.data_format) 155返回输出 156
〜\ Anaconda3 \ lib \ site-packages \ keras \ layers \ pooling.py在 _pooling_function(自己,输入,pool_size,步幅,填充,data_format) 269填充,data_format): (270) -> 271填充,data_format,pool_mode ='avg') 272返回输出 273
〜\ Anaconda3 \ lib \ site-packages \ keras \ backend \ tensorflow_backend.py在 pool2d(x,pool_size,步幅,填充,data_format,pool_mode)3012 x = tf.nn.max_pool(x,pool_size,strides,padding = padding)3013
elif pool_mode =='avg': -> 3014 x = tf.nn.avg_pool(x,pool_size,strides,padding = padding)3015否则:3016提高 ValueError('无效的池模式:',pool_mode)〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ ops \ nn_ops.py在 avg_pool(值,ksize,步幅,填充,data_format,名称)2110
padding = padding,2111 data_format = data_format, -> 2112 name = name)2113 2114〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ ops \ gen_nn_ops.py在 avg_pool(值,ksize,步幅,填充,data_format,名称) 73 _,_,_op = _op_def_lib._apply_op_helper( 74“ AvgPool”,值=值,ksize = ksize,步幅=步幅,填充=填充, ---> 75 data_format = data_format,name = name) 76 _result = _op.outputs [:] 77 _inputs_flat = _op.inputs
〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ op_def_library.py 在_apply_op_helper中(自己,op_type_name,name,** keywords) (785) 786章 -> 787 op_def = op_def) 788返回output_structure,op_def.is_stateful,op 789
〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py在 create_op(self,op_type,input,dtypes,input_types,name,attrs, op_def,compute_shapes,compute_device)3390
input_types = input_types,3391
original_op = self._default_original_op, -> 3392 op_def = op_def)3393 3394#注意:形状是在启用C API的情况下延迟计算的。〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py在 init (自身,node_def,g,输入,output_types,control_inputs,input_types,original_op,op_def)1732 op_def,输入, node_def.attr)1733 self._c_op = _create_c_op(self._graph, node_def,grouped_inputs, -> 1734 control_input_ops)1735 else:1736 self._c_op = None
〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py在 _create_c_op(图形,node_def,输入,control_inputs)1568除外error.InvalidArgumentError为e:1569#转换为ValueError 向后兼容。 -> 1570提高ValueError(str(e))1571 1572返回c_op
ValueError:负尺寸大小是由1减去7引起的 输入形状为'resnet50_14 / avg_pool / AvgPool'(op:'AvgPool'): [?,1,1,2048]。
答案 0 :(得分:1)
您的问题/错误来自您输入的形状。您输入的形状太小。
所有经过预先训练的网络均具有最小的图像尺寸。对于ResNet50,此最小值为197。将SAMPLE_SHAPE增加到197或ResNet50的默认大小为224:
SAMPLE_SHAPE = (197,197,3)
或
SAMPLE_SHAPE = (224,224,3)
如果图像较小,请将其调整为197或224