gpt4 book ai didi

python - 为什么这个 Keras Conv2D 层与输入不兼容?

转载 作者:行者123 更新时间:2023-11-30 09:26:50 24 4
gpt4 key购买 nike

我无法理解我的第一个卷积神经网络所期望的输入。

我的训练集是 500 张 50x50 像素的灰度图像。

enter image description here

网络从 Conv2D 层开始。参数 input_shape 的文档说:

Input shape:
4D tensor with shape:
`(samples, channels, rows, cols)` if data_format='channels_first'
or 4D tensor with shape:
`(samples, rows, cols, channels)` if data_format='channels_last'.

所以我预计我需要提供我的图像(到目前为止存储在pandas.DataFrame的列中)作为形状的numpy.array (500, 1, 50, 50),因为图像中只有一个“颜色” channel 。我将其 reshape 如下:

X = np.array([img for img in imgs["img_res"]])
X = X.reshape(-1, 1, img_size, img_size)

X.shape 现在是:(500, 1, 50, 50)。我将其作为 Conv2D 的论据提供给 Conv2D。

model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters=64,
kernel_size=(3,3),
input_shape=X.shape[1:],
activation="relu"),
])

这会产生以下错误。你能指出这里有什么问题吗?

---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
/usr/local/lib/python3.6/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: Negative dimension size caused by subtracting 3 from 1 for 'conv2d/Conv2D' (op: 'Conv2D') with input shapes: [?,1,50,50], [3,3,50,64].

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last)
<ipython-input-24-0b665136e60b> in <module>()
3 kernel_size=(3,3),
4 input_shape=X.shape[1:],
----> 5 activation="relu"),
6 #tf.keras.layers.MaxPool2D(pool_size=(2,2)),
7 #tf.keras.layers.Conv2D(filters=64,

/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/sequential.py in __init__(self, layers, name)
99 if layers:
100 for layer in layers:
--> 101 self.add(layer)
102
103 @property

/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/sequential.py in add(self, layer)
162 # and create the node connecting the current layer
163 # to the input layer we just created.
--> 164 layer(x)
165 set_inputs = True
166 else:

/usr/local/lib/python3.6/site-packages/tensorflow/python/keras/_impl/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs)
312 """
313 # Actually call the layer (optionally building it).
--> 314 output = super(Layer, self).__call__(inputs, *args, **kwargs)
315
316 if args and getattr(self, '_uses_inputs_arg', True):

/usr/local/lib/python3.6/site-packages/tensorflow/python/layers/base.py in __call__(self, inputs, *args, **kwargs)
715
716 if not in_deferred_mode:
--> 717 outputs = self.call(inputs, *args, **kwargs)
718 if outputs is None:
719 raise ValueError('A layer\'s `call` method should return a Tensor '

/usr/local/lib/python3.6/site-packages/tensorflow/python/layers/convolutional.py in call(self, inputs)
166
167 def call(self, inputs):
--> 168 outputs = self._convolution_op(inputs, self.kernel)
169
170 if self.use_bias:

/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py in __call__(self, inp, filter)
866
867 def __call__(self, inp, filter): # pylint: disable=redefined-builtin
--> 868 return self.conv_op(inp, filter)
869
870

/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py in __call__(self, inp, filter)
518
519 def __call__(self, inp, filter): # pylint: disable=redefined-builtin
--> 520 return self.call(inp, filter)
521
522

/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/nn_ops.py in __call__(self, inp, filter)
202 padding=self.padding,
203 data_format=self.data_format,
--> 204 name=self.name)
205
206

/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/gen_nn_ops.py in conv2d(input, filter, strides, padding, use_cudnn_on_gpu, data_format, dilations, name)
954 "Conv2D", input=input, filter=filter, strides=strides,
955 padding=padding, use_cudnn_on_gpu=use_cudnn_on_gpu,
--> 956 data_format=data_format, dilations=dilations, name=name)
957 _result = _op.outputs[:]
958 _inputs_flat = _op.inputs

/usr/local/lib/python3.6/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

/usr/local/lib/python3.6/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.

/usr/local/lib/python3.6/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

/usr/local/lib/python3.6/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: Negative dimension size caused by subtracting 3 from 1 for 'conv2d/Conv2D' (op: 'Conv2D') with input shapes: [?,1,50,50], [3,3,50,64].

最佳答案

通过将 data_format='channels_first' 传递给 Conv2D 来指定您不使用默认数据格式。

model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(filters=64,
kernel_size=(3,3),
input_shape=X.shape[1:],
activation="relu",
data_format='channels_first'),
])

关于python - 为什么这个 Keras Conv2D 层与输入不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com