当前位置: 首页 > 知识库问答 >
问题:

ValueError:层序列的输入0与层(神经网络)不兼容

归和惬
2023-03-14

完全错误:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected 
axis -1 of input shape to have value 20 but received input with shape (None, 1)

问题

我一直在努力建立一个神经网络,因为它不断抱怨收到的形状。x\u trian和y\u train的形状都是(20,)但当我将其输入为input\u形状时,它表示希望输入形状的值为20,但实际上收到了(None,1)。

我不明白(无,1)来自哪里,因为当我打印x_train和y_train的形状时,它给了我(20,)。它们都是数字数组

代码

# (the training_data and testing_data are both just numpy arrays with 0 being the data and 1 being the label)
x_train = training_data[:, 0]  # training feature
y_train = training_data[:, 1]  # training label
x_test = testing_data[:, 0]  # testing feature
y_test = testing_data[:, 1]  # testing label

# Create neural network.
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(16, input_dim=20, activation='relu', input_shape=(20,)))
model.add(Dense(12, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

我试过的

然后我把input_shape改为(无,1),但它说:

ValueError: Shapes (None, 1) and (None, 1, 2) are incompatible

所以,我把它改为(None,1,2),然后它说:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected 
axis -1 of input shape to have value 2 but received input with shape (None, 1)

然后将返回到原始错误。

然后,我发现(20,)的维数仅为1,因此我将input\u dim更改为1,并得到:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected 
axis -1 of input shape to have value 20 but received input with shape (None, 1)

结论

我几乎可以肯定它与input_dim、input_shape或密集单位(第一个model.add是16(错误抱怨的那个)有关,但我非常不确定如何更改值以适应我的数据。

我知道形状是(20,),我知道维数是1,所以它可能与密集单元的值有关(在第一个model.add上是16,这是编译器抱怨的)。我读了很多关于单位测量它的内容,但仍然努力去理解它。

共有1个答案

云英才
2023-03-14

在x\U列车中,由于您有20个数据点,每个数据点都是一个数字,因此正确的形状应该是(1,)。Keras希望您输入每个数据点的形状,而不是整个数据集本身的长度。例如,如果我的数据

# shape of x_train is (2,3)
# shape of each data point is (3,)    
x_train = np.array([[1,2,1],
                    [1,2,3]])

那么我的输入形状将是(3,)

在您的情况下,可以将模型更改为如下所示:

from keras.layers import Input

model = Sequential()
model.add(Input(shape=(1,)))
model.add(Dense(16, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(2, activation='softmax'))

此外,由于您使用的是损失='categorical_crossentropy',因此您必须为您的y_train使用one-Hot编码,它必须是(20,2)的形状。您可以在此处参考如何转换为一种热编码:将索引数组转换为1-Hot编码的numpy数组

 类似资料:
  • 问题内容: 我已经检查了所有解决方案,但仍然遇到相同的错误。我的训练图像形状是,我相信它是4维的,但是我不知道为什么错误显示它是5维的。 所以这就是我的定义 问题答案: 问题是。 它实际上应该仅包含3个维度。内部keras将添加批次尺寸使其成为4。 由于您可能使用了4维(包括批处理),因此keras将添加5维。 您应该使用。

  • 我有一个在MNIST上训练过的模型,但当我放入一个手工制作的图像样本时,它会引发值错误:层序列的输入0与层不兼容:输入形状的轴-1预期值为784,但收到了形状的输入(无,1) 我已经检查了模型的输入,它与MNIST的形状相同。x\U列车【0】。形状(784,)和我的图像arr.shape(784,)请帮助! 。。。 ValueError:layer sequential的输入0与层不兼容:输入形状

  • 我正在强化学习训练无人机的自主导航。由于模拟环境和CNN:AlexNet,支持的问题是基于摄像头的自主导航。我想添加另外两个输入来优化导航:无人机的位置/方向和以3D矩阵形式移动的体积单位。神经网络的目的是预测无人机的下一步行动。 我想在卷积层之后添加这两个新输入,但我不知道如何集成它们。我打算展平3D矩阵,并在完全连接的层之前将其与位置/方向一起添加,但我不知道这是否是正确的方法。 整合这两种新

  • 第 10 章介绍了人工神经网络,并训练了我们的第一个深度神经网络。 但它是一个非常浅的 DNN,只有两个隐藏层。 如果你需要解决非常复杂的问题,例如检测高分辨率图像中的数百种类型的对象,该怎么办? 你可能需要训练更深的 DNN,也许有 10 层,每层包含数百个神经元,通过数十万个连接来连接。 这不会是闲庭信步: 首先,你将面临棘手的梯度消失问题(或相关的梯度爆炸问题),这会影响深度神经网络,并使较

  • 是否有方法按层(而不是端到端)训练卷积神经网络,以了解每一层对最终架构性能的贡献?

  • 我一直在上神经网络的课,不太明白为什么我从逻辑回归的准确度得分和两层神经网络(输入层和输出层)中得到不同的结果。输出层使用sigmoid激活功能。据我所知,我们可以使用神经网络中的sigmoid激活函数来计算概率。这应该是非常相似的,如果不完全相同的逻辑回归试图完成。然后从那里使用梯度下降进行反向传播以最小化误差。这可能有一个简单的解释,但我不明白为什么准确度得分差异如此之大。在这个例子中,我没有