在resnet模型中拟合图像时尺寸问题

时间:2018-07-04 11:37:46

标签: python tensorflow machine-learning keras computer-vision

也许有一些方法可以摆脱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]。

1 个答案:

答案 0 :(得分:1)

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

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

SAMPLE_SHAPE = (197,197,3)

SAMPLE_SHAPE = (224,224,3)

如果图像较小,请将其调整为197或224