首页 > 解决方案 > 神经网络的输入大小不是预期的

问题描述

我正在尝试构建一个神经网络来对 reddit 消息进行如下分类:

original_train= train[0] # messages
data_list= original_train[0:500] # take first 500 examples as training set
originaly_train=train[1] # labels/ categories
y_train=originaly_train[0:500]
x_validation=original_train[500:1000] # take another 500 examples as training set
y_validation=originaly_train[500:1000]



model = Sequential()
model.add(layers.Dense(50, activation = "relu", input_shape=(1000, )))
# Hidden - Layers
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(100, activation = "relu"))
model.add(layers.Dropout(0.2, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
# Output- Layer
model.add(layers.Dense(20, activation = "sigmoid"))
model.summary()

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


model.fit(vectorized_training, y_train_neralnet,
          batch_size=128,
          epochs=12,
          verbose=1,
          validation_data=(vectorized_validation, y_validation_neralnet))

在这里,神经网络的输入向量应该是一个维度为 1000 的向量,而输出假设是大小为 20 的向量,因为我们试图对 20 个对象进行分类。

所以我的 vectorized_training 的形状为 (500,1000),而 y_train_neralnet 的形状为 (500,20),vectorized_validation 和 y_validation_neralnet 也是如此。

这是一个文本分类问题。所以我们有一组词。每个输入都是消息中出现的那些词的频率向量。相应的标签是一个维数为 20 的向量,在该向量中,您在特定位置获得 1,在其他位置获得 0,表示它属于 20 个标签中的哪一个。但我得到这个错误:

ValueError: Error when checking model input: 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 500 arrays: [array([[0],
   [0],
   [0],
   [1],
   [0],
   [1],
   [0],
   [1],
   [0],
   [0],
   [0],
   [0],
   [0],
   [0],
   [0],
   [0],
   ...

标签: pythonneural-network

解决方案


尝试将 input_shape=(1000,) 替换为 input_shape=(1000)


推荐阅读