Python Can';不知道keras输入形状错误?

Python Can';不知道keras输入形状错误?,python,neural-network,keras,keras-layer,Python,Neural Network,Keras,Keras Layer,我试图通过我的神经网络传递一个带有形状的数组(1169909,10,10) 但不管我做什么 input_shape=(None,10,10) input_shape=x_train.shape[1:] input_shape=x_train.shape input_shape=(1169909, 1) input_shape=(10,10) input_shape=(1169909,10) input_shape=(1169909,10,10) input_shape=(1,10,10) 我仍

我试图通过我的神经网络传递一个带有形状的数组(1169909,10,10)

但不管我做什么

input_shape=(None,10,10)
input_shape=x_train.shape[1:]
input_shape=x_train.shape
input_shape=(1169909, 1)
input_shape=(10,10)
input_shape=(1169909,10)
input_shape=(1169909,10,10)
input_shape=(1,10,10)
我仍然得到一个错误。错误更改为:

but got array with shape (1169909, 10, 10)
but got array with shape (1169909, 1)
取决于我输入的方式,这只会增加我的困惑

实际输入如下所示,它是由这些较小的10x10阵列组成的阵列:

array([[ 2, -1, -1, -1, -1, -1, -1, -1, -1,  0],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [11, -1, 11,  6,  3,  2, -1, -1, -1, 11],
       [-1, -1, -1, -1,  5,  7, -1, -1,  2,  7],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
       [-1, -1, -1, -1, 22, 25, -1, -1, -1, 22],
       [22, -1, -1, -1, 26, 29, -1, -1, 26, 25],
       [27, -1, -1, -1, -1, -1, -1, -1, -1, 23],
       [31, 24, 31, -1, -1, -1, -1, -1, -1, 31]])
我试图通过查看堆栈溢出和其他方面来理解这个问题,但我无法找出问题所在,而且这些解决方案对我不起作用

以下是目前的模型:

x_train, x_test, y_train, y_test = train_test_split(xving, ywing, test_size=0.2)

x_train = numpy.array(x_train)
y_train = numpy.array(y_train)


model = Sequential()
model.add(keras.layers.Dense(250,activation='tanh', input_shape=(None,10,10)))
model.add(keras.layers.Dense(150,activation='relu'))
model.add(keras.layers.Dense(25,activation='sigmoid'))
model.add(keras.layers.Dense(2,activation='softmax'))
optimizerr = keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
model.compile(optimizer=optimizerr, loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(x_train, y_train,epochs = 25, batch_size = 32, verbose=1)
编辑: 因此,当我使用:

input_shape=x_train.shape[1:]
该错误与目标有关:

但目标是一个数组。当我把它作为一个列表保存时,我反而得到了错误:

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 1169909 arrays: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
所以现在我想我的问题是为什么目标是个问题

y_train.shape
收益率:

(1169909,)

所以我还是很困惑?

假设你有1169909张图片(或2D数据项)作为数据集,如果你想将它们作为矩阵传递给你的模型,你应该在前面使用一个2D卷积层,否则这和在将它们全部传递给你的模型之前展平每张图片没有什么不同。我建议使用卷积模式,但如果不是这种情况,可以按如下方式展平数组:

x = x.reshape((1169909, 100))
model.add(keras.layers.Dense(250, activation='tanh', input_dim=100))

同样,将2D数据传递到密集层将无法利用数据的结构属性。

能否显示代码的其余部分?至少第一层。我为目标错误添加了模型本身和ITA前面的位:,因此形状不匹配。当我将最后一层更改为model.add(keras.layers.Dense(1,activation='softmax'))(将2更改为1)时,我仍然得到相同的错误?我希望它能给出两个类的概率,所以我选择了2。即使我使用np_utils。要进行分类(y_train),它也会失败。是的,您必须将最后一层中的单元数更改为1。但是,正如我在前面的评论中提到的,另一个问题是模型的输出的形状是
(无,10,1)
,而标签的形状是
(1169909,1)
,因此它们不匹配。解决此问题的一种方法是在模型中的某个位置添加展平层(例如,作为第一层)。或者,您可以将训练数据改为
(num_samples,10*10)
,并相应地更改模型第一层的
输入形状。嗯,我没有想过使用卷积方案,因为我实际上试图让它预测Stratego板是否可能导致胜利,我添加了一些conv层,但是我得到了另一种错误。但是你得到了正确的答案,因为我原来的问题已经不存在了,这和解决它是一样的哈哈哈
x = x.reshape((1169909, 100))
model.add(keras.layers.Dense(250, activation='tanh', input_dim=100))