在将图像适配到resnet模型时遇到尺寸问题

是否有办法去掉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 mmodel = generate_model(SAMPLE_SHAPE)

错误:InvalidArgumentError Traceback (most recent call last) ~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in _create_c_op(graph, node_def, inputs, control_inputs) 1566 try: -> 1567 c_op = c_api.TF_FinishOperation(op_desc) 1568 except errors.InvalidArgumentError as e:

InvalidArgumentError: 由于从1中减去7导致的负维度大小,针对’resnet50_14/avg_pool/AvgPool’(操作:’AvgPool’)的输入形状为[?,1,1,2048]。

在处理上述异常时,发生了另一个异常:

ValueError Traceback (most recent call last) in () 15 #predictions = Dense(2, activation=’softmax’)(x) 16 return m —> 17 model = generate_model(SAMPLE_SHAPE)

in generate_model(sample_shape) 7 inp = Input(shape=sample_shape) 8 resnet = resnet50.ResNet50(weights=”imagenet”,include_top=False) —-> 9 x = resnet(inp) 10 predictions = Dense(2, activation=’softmax’)(x) 11

~\Anaconda3\lib\site-packages\keras\engine\topology.py in call(self, inputs, **kwargs) 552 553 # Actually call the layer, collecting output(s), mask(s), and shape(s). –> 554 output = self.call(inputs, **kwargs) 555 output_mask = self.compute_mask(inputs, previous_mask) 556

~\Anaconda3\lib\site-packages\keras\engine\topology.py in call(self, inputs, mask) 1988 return self._output_tensor_cache[cache_key] 1989 else: -> 1990 output_tensors, _, _ = self.run_internal_graph(inputs, masks) 1991 return output_tensors 1992

~\Anaconda3\lib\site-packages\keras\engine\topology.py in run_internal_graph(self, inputs, masks) 2138
if ‘mask’ not in kwargs: 2139
kwargs[‘mask’] = computed_mask -> 2140 output_tensors = _to_list(layer.call(computed_tensor, **kwargs)) 2141 output_masks = _to_list(layer.compute_mask(computed_tensor, 2142
computed_mask))

~\Anaconda3\lib\site-packages\keras\layers\pooling.py in call(self, inputs) 152 strides=self.strides, 153 padding=self.padding, –> 154 data_format=self.data_format) 155 return output 156

~\Anaconda3\lib\site-packages\keras\layers\pooling.py in _pooling_function(self, inputs, pool_size, strides, padding, data_format) 269 padding, data_format): 270 output = K.pool2d(inputs, pool_size, strides, –> 271 padding, data_format, pool_mode=’avg’) 272 return output 273

~\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py in pool2d(x, pool_size, strides, padding, 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 else: 3016 raise ValueError(‘Invalid pooling mode:’, pool_mode)

~\Anaconda3\lib\site-packages\tensorflow\python\ops\nn_ops.py in avg_pool(value, ksize, strides, padding, data_format, name) 2110
padding=padding, 2111 data_format=data_format, -> 2112 name=name) 2113 2114

~\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_nn_ops.py in avg_pool(value, ksize, strides, padding, data_format, name) 73 _, _, _op = _op_def_lib._apply_op_helper( 74 “AvgPool”, value=value, ksize=ksize, strides=strides, padding=padding, —> 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 in _apply_op_helper(self, op_type_name, name, **keywords) 785 op = g.create_op(op_type_name, inputs, output_types, name=scope, 786 input_types=input_types, attrs=attr_protos, –> 787 op_def=op_def) 788 return output_structure, op_def.is_stateful, op 789

~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in create_op(self, op_type, inputs, 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 # Note: shapes are lazily computed with the C API enabled.

~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in init(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def) 1732 op_def, inputs, 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 in _create_c_op(graph, node_def, inputs, control_inputs) 1568 except errors.InvalidArgumentError as e: 1569 # Convert to ValueError for backwards compatibility. -> 1570 raise ValueError(str(e)) 1571 1572 return c_op

ValueError: 由于从1中减去7导致的负维度大小,针对’resnet50_14/avg_pool/AvgPool’(操作:’AvgPool’)的输入形状为[?,1,1,2048]。


回答:

您的问题/错误来自于您的输入形状。您的输入形状太小了。

所有预训练网络都有一个最小的图像尺寸。对于ResNet50,这个最小尺寸是197。将您的SAMPLE_SHAPE增加到197或ResNet50的默认尺寸224:

SAMPLE_SHAPE = (197,197,3)

或者

SAMPLE_SHAPE = (224,224,3)

如果您的图像更小,请将它们调整到197或224大小

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注