Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)相关的知识,希望对你有一定的参考价值。

Keras在这个简单的例子上抛出了一条错误信息。需要帮忙。另外,是否有关于Conv2DInput所期望的张量尺寸的文档?花了太多时间试图找到解决方案,并且每个方向都要改变/旋转张量......

我的规格:Windows 10 x64,Python 3.6(来自Anaconda 3 x64),Keras 2.09,TensorFlow 1.4.0

import numpy as np
from keras.models import Model
from keras.layers import Conv2D, Input
from keras.utils.np_utils import to_categorical

n_samples, n_row, n_col, n_channels = 1006, 99, 81, 1

tX = np.random.rand(n_samples, n_row, n_col, n_channels)
tY = np.random.randint(0,5,n_samples)
inp = Input(shape=(n_row, n_col, n_channels))
lr = Conv2D(16, kernel_size=2, padding='same')(inp)
M = Model(inputs=inp, outputs=lr)
M.compile(optimizer='Adam',loss='categorical_crossentropy')
M.fit(tX, to_categorical(tY, num_classes=None))

给出错误消息:

Traceback (most recent call last):
  File "C:Program Files (x86)Microsoft Visual StudiosharedAnaconda3_64libsite-packagesIPythoncoreinteractiveshell.py", line 2862, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-11-27bd9e59639d>", line 14, in <module>
    M.fit(tX, to_categorical(tY, num_classes=None))
  File "C:Program Files (x86)Microsoft Visual StudioSharedAnaconda3_64libsite-packageskerasengine	raining.py", line 1581, in fit
    batch_size=batch_size)
  File "C:Program Files (x86)Microsoft Visual StudioSharedAnaconda3_64libsite-packageskerasengine	raining.py", line 1418, in _standardize_user_data
    exception_prefix='target')
  File "C:Program Files (x86)Microsoft Visual StudioSharedAnaconda3_64libsite-packageskerasengine	raining.py", line 141, in _standardize_input_data
    str(array.shape))
ValueError: Error when checking target: expected conv2d_3 to have 4 dimensions, but got array with shape (1006, 5)
答案

那么问题是你的模型毫无意义。卷积的输出具有形状(1006,99,81,16),并且由于您使用此输出构建了模型,因此它也是模型的输出。您的标签有形状(1006,5)。两种形状必须匹配才能计算损失函数,但由于它们没有,因此Keras会因输出形状出乎意料而引发错误。

修复它的一个简单方法是在卷积后添加一个Dense(5, activation = "softmax")图层,并将其作为模型输出,然​​后输出形状将为(1006,5)。该层仅用作卷积输出的分类器。

以上是关于Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 keras lambda 层中使用 tf.py_func 来包装 python 代码。 ValueError:应定义 Dense 输入的最后一个维度。没有找到

Python keras:多标签值的 to_categorical 给出 ValueError: invalid literal for int() with base 10

Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)

ValueError:尝试计算 ROC 曲线时输入形状错误 (2, 256, 3)

ValueError:没有为任何变量提供梯度 - Tensorflow 2.0/Keras

Keras:ValueError:检查输入时出错