我正在尝试使用gensim库生成的单词向量训练CNN。以数字形式生成所有数据后,当出现以下错误时,我尝试使用Keras将其传递给CNN模型:
ValueError:检查输入时出错:预期conv2d_1_input具有4维,但数组的形状为(20000,250,50)
我已经搜索了这个问题好几个小时,针对类似/相同问题发布的所有解决方案都无法为我解决此错误。谁能看到我输入尺寸出现问题的地方吗?我生成了一些随机的numpy数据来重新产生错误:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Convolution2D, Flatten, Dropout
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
from keras.callbacks import TensorBoard
t = np.random.rand(20000,250,50)
l = np.random.rand(20000,1)
embedding_vecor_length = 50
net = Sequential()
net.add(Convolution2D(64, 3,input_shape=(1,250,50),
data_format='channels_first'))
# Convolutional model (3x conv, flatten, 2x dense)
net.add(Convolution2D(32,(3), padding='same'))
net.add(Convolution2D(16,(3), padding='same'))
net.add(Convolution2D(8,(3), padding='same'))
net.add(Flatten())
net.add(Dropout(0.2))
net.add(Dense(180,activation='sigmoid'))
net.add(Dropout(0.2))
net.add(Dense(1,activation='sigmoid'))
net.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
tensorBoardCallback = TensorBoard(log_dir='./logs', write_graph=True)
net.summary()
net.fit(t, l, epochs=3, callbacks=[tensorBoardCallback], batch_size=64)
答案 0 :(得分:0)
卷积使用4维。考虑到您使用的是“ channels_first”:
您的输入缺少频道。
fun3