首页 文章

在resnet模型中拟合图像时的尺寸问题[关闭]

提问于
浏览
0

也许有某种方法摆脱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 Traceback(最近一次调用最后一次)〜\ anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py in create_c_op(graph,node_def,inputs,control_inputs)1566尝试: - > 1567 c_op = c_api .TF_FinishOperation(op_desc)1568除了errors.InvalidArgumentError as e:InvalidArgumentError:通过输入形状为'resnet50_14 / avg_pool / AvgPool'(op:'AvgPool')从1减去7引起的负维度大小:[?,1,1, 2048 . 在处理上述异常期间,发生了另一个异常:ValueError Traceback(最近一次调用last)in()15 #predictions = Dense(2,activation ='softmax')(x)16 return m ---> 17 model = generate_model generate_model(sample_shape)中的(SAMPLE_SHAPE)7 inp =输入(shape = sample_shape)8 resnet = resnet50.ResNet50(weights =“imagenet”,include_top = False)----> 9 x = resnet(inp)10个预测=密集(2,activation ='softmax')(x)11~ \ Anaconda3 \ lib \ site-packages \ keras \ engine \ topology.py in call(self,inputs,** kwargs)552 553#实际调用图层,收集输出,掩模和形状 . - > 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,输入,掩码)1988返回self.output_tensor_cache [cache_key] 1989 else: - > 1990 output_tensors, = self.run_internal_graph(输入,掩码)1991返回output_tensors 1992~ \ Anaconda3 \ lib \ site-packages \ keras \ engine \ run_internal_graph中的topology.py(self,inputs,masks)2138如果'mask'不在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在_pooling_function中返回输出156~ \ Anaconda3 \ lib \ site-packages \ keras \ layers \ pooling.py(self,inputs,pool_size,strides,padding,data_format)269 p添加,data_format):270输出= K.pool2d(输入,pool_size,strides, - > 271填充,data_format,pool_mode ='avg')272返回输出273~ \ Anaconda3 \ lib \ site-packages \ keras \ backend \ pool2d中的tensorflow_backend.py(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引发ValueError('无效的池模式:',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 \ avg_pool中的ops \ gen_nn_ops.py(value,ksize,strides,padding,data_format,name)73 ,_op = _op_def_lib._apply_op_helper(74“AvgPool”,value = value,ksize = ksize,strides = strides,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 create_op中的\ tensorflow \ python \ framework \ ops.py(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#注意:在启用C API的情况下延迟计算形状 . init中的〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py(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 =无〜\ Anaconda3 \ lib \ site-packages \ tensorflow \ python \ framework \ ops.py in _create_c_op( graph,node_def,inputs,control_inputs)1568除了errors.InvalidArgumentError as e:1569#转换为ValueError以实现向后兼容性 . - > 1570引发ValueError(str(e))1571 1572 return c_op ValueError:通过输入形状为'resnet50_14 / avg_pool / AvgPool'(op:'AvgPool')从1减去7引起的负尺寸大小:[?,1, 1,2048] .

1 回答

  • 0

    你的问题/错误来自你输入的形状 . 您的输入形状太小 .

    所有预先训练的网络都具有最小的图像尺寸 . 对于ResNet50,此最小值为197.将SAMPLE_SHAPE增加到197或ResNet50的默认大小224:

    SAMPLE_SHAPE = (197,197,3)
    

    要么

    SAMPLE_SHAPE = (224,224,3)
    

    如果您的图像较小,请将它们调整为197或224

相关问题