Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)相关的知识,希望对你有一定的参考价值。
Keras在这个简单的例子上抛出了一条错误信息。需要帮忙。另外,是否有关于Conv2D
和Input
所期望的张量尺寸的文档?花了太多时间试图找到解决方案,并且每个方向都要改变/旋转张量......
我的规格: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)