logo
Loading...

Day15 范例code出现 InvalidArgumentError - Cupoy

我用的tensorflow版本是2.0谢谢~完整错误信息如下,(自己有更改过keras.json中的...

Day15 范例code出现 InvalidArgumentError

2020/07/12 下午 05:34
電腦視覺深度學習討論版
骑士
觀看數:75
回答數:2
收藏數:0

我用的tensorflow版本是2.0

谢谢~

完整错误信息如下,(自己有更改过keras.json中的"channels_last"和"channels_first",均是报相同错误)。

(50000, 32, 32, 3) 


--------------------------------------------------------------------------- InvalidArgumentError                      Traceback (most recent call last) D:\Anaconda\lib\site-packages\tensorflow_core\python\framework\ops.py in _create_c_op(graph, node_def, inputs, control_inputs)    1609 try: -> 1610 c_op = c_api.TF_FinishOperation(op_desc)    1611 except errors.InvalidArgumentError as e: InvalidArgumentError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,32].  During handling of the above exception, another exception occurred:  ValueError                                Traceback (most recent call last) <ipython-input-1-f3e169563d31> in <module>      47 classifier.add(Convolution2D(32,3,3,activation='relu'))      48 classifier.add(BatchNormalization())##BatchNormalization ---> 49 classifier.add(MaxPooling2D(pool_size=(2,2)))      50      51 #flatten D:\Anaconda\lib\site-packages\tensorflow_core\python\training\tracking\base.py in _method_wrapper(self, *args, **kwargs)     455     self._self_setattr_tracking = False # pylint: disable=protected-access     456 try: --> 457 result = method(self, *args, **kwargs)     458 finally:     459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access D:\Anaconda\lib\site-packages\tensorflow_core\python\keras\engine\sequential.py in add(self, layer)     194 # If the model is being built continuously on top of an input layer:     195 # refresh its output. --> 196 output_tensor = layer(self.outputs[0])     197 if len(nest.flatten(output_tensor)) != 1:     198         raise TypeError('All layers in a Sequential model '  D:\Anaconda\lib\site-packages\tensorflow_core\python\keras\engine\base_layer.py in __call__(self, inputs, *args, **kwargs)     840                     not base_layer_utils.is_in_eager_or_tf_function()):     841 with auto_control_deps.AutomaticControlDependencies() as acd: --> 842 outputs = call_fn(cast_inputs, *args, **kwargs)     843 # Wrap Tensors in `outputs` in `tf.identity` to avoid     844 # circular dependencies. D:\Anaconda\lib\site-packages\tensorflow_core\python\keras\layers\pooling.py in call(self, inputs)     246         strides=strides,     247         padding=self.padding.upper(), --> 248         data_format=conv_utils.convert_data_format(self.data_format, 4))     249 return outputs     250 D:\Anaconda\lib\site-packages\tensorflow_core\python\ops\nn_ops.py in max_pool(value, ksize, strides, padding, data_format, name, input)    3813         padding=padding,    3814         data_format=data_format, -> 3815         name=name)    3816    3817 D:\Anaconda\lib\site-packages\tensorflow_core\python\ops\gen_nn_ops.py in max_pool(input, ksize, strides, padding, data_format, name)    5673   _, _, _op = _op_def_lib._apply_op_helper(    5674 "MaxPool", input=input, ksize=ksize, strides=strides, padding=padding, -> 5675                    data_format=data_format, name=name)    5676   _result = _op.outputs[:]    5677   _inputs_flat = _op.inputs  D:\Anaconda\lib\site-packages\tensorflow_core\python\framework\op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)     791         op = g.create_op(op_type_name, inputs, dtypes=None, name=scope,     792                          input_types=input_types, attrs=attr_protos, --> 793                          op_def=op_def)     794 return output_structure, op_def.is_stateful, op     795 D:\Anaconda\lib\site-packages\tensorflow_core\python\framework\func_graph.py in create_op(***failed resolving arguments***)     546     return super(FuncGraph, self)._create_op_internal(  # pylint: disable=protected-access     547         op_type, inputs, dtypes, input_types, name, attrs, op_def, --> 548         compute_device)     549     550 def capture(self, tensor, name=None): D:\Anaconda\lib\site-packages\tensorflow_core\python\framework\ops.py in _create_op_internal(self, op_type, inputs, dtypes, input_types, name, attrs, op_def, compute_device)    3427           input_types=input_types,    3428           original_op=self._default_original_op, -> 3429           op_def=op_def)    3430       self._create_op_helper(ret, compute_device=compute_device)    3431 return ret  D:\Anaconda\lib\site-packages\tensorflow_core\python\framework\ops.py in __init__(self, node_def, g, inputs, output_types, control_inputs, input_types, original_op, op_def)    1771           op_def, inputs, node_def.attr)    1772       self._c_op = _create_c_op(self._graph, node_def, grouped_inputs, -> 1773                                 control_input_ops)    1774 # pylint: enable=protected-access    1775 D:\Anaconda\lib\site-packages\tensorflow_core\python\framework\ops.py in _create_c_op(graph, node_def, inputs, control_inputs)    1611 except errors.InvalidArgumentError as e:    1612 # Convert to ValueError for backwards compatibility. -> 1613 raise ValueError(str(e))    1614    1615 return c_op  ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,32].

回答列表

  • 2020/07/13 上午 11:54
    Jeffrey
    贊同數:0
    不贊同數:0
    留言數:0

    看起來應該跟 channel_first/channel_last 無關, 

    1. CONV 跟 Pooling 的  input data shape 一致?  

    2. 有退回 TF1.x 嘗試過嗎? 

  • 2020/10/01 下午 07:22
    Patrick Ruan
    贊同數:0
    不贊同數:0
    留言數:0

    基本上出現 "Negative dimension size" 很容易是 我們的 輸入資料的 dimension 不足以作 maxpooling ,比如說 

    error message 最後兩行說,  "caused by subtracting 2 from 1 for 'max_pooling2d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,1,1,32]."

    因為我們前一層輸出,這一層的輸入 size = (1,1,32)  , (1,1) 是無法作 maxpooling 的



    其實作 CNN 也是有機會中標 "Negative dimension size":  每次做CNN我們的 size 都會變小一點,做太多次了,變成了小於零。


    比如 (32,32) 卷 (7,7) ==> (26,26) 再卷 (7, 7)  ==> (20,20)    再卷 (7, 7)  ==> (14,14) 再卷 (7, 7)  ==> (8,8) 再卷 (7, 7)  ==> (2, 2)  ==> 再卷 (7, 7)  就變負的了  就會 是  Negative dimension size