我用Keras编写了以下模型,但在进行预测时,我遇到了ValueError (在代码后面声明)。我在StackOverflow上查看了其他问题,但只找到了this one,但我无法理解答案是什么。
我正在尝试建立一个网络,它以X为输入,具有200个神经元的隐藏,最后是一个σ神经元来预测输出类别。目标是二进制分类。
模型的输入是(n X 400)作为X,(n,1)作为Y。X和Y都是数值数组。代码和错误消息如下。此外,神经网络的结果是:损失=无穷大,精确度= 0.0,这意味着我这边的某些东西显然是错误的。
def create_baseline():
# create model
model = Sequential()
model.add(Dense(200, input_dim=400, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model我按如下方式训练模型:
estimator = KerasClassifier(build_fn=create_baseline, nb_epoch=5, batch_size=5, verbose=1)
estimator.fit(X, Y)我试着用以下几点来预测:
estimator.predict(X[0])我收到以下错误:
ValueError: Error when checking : expected dense_34_input to have shape (None, 400) but got array with shape (400, 1)编辑1:训练数据X有400个特征(这些特征是从文档的word2vec中学习的)。Y是一个仅为0和1的标签。我将训练文件读入到pandas数据帧中,然后使用dataframe.values获得X和Y作为numpy数组。
编辑2:基于下面的答案,我从我的模型中预测为estimator.predict(train_X_vals[0].reshape(1,len(train_X_vals[0]))),并得到以下输出:array([[ nan]], dtype=float32)
编辑3:我从训练集中预测1000个X的值,我得到所有这些值作为nan。
编辑4:我有大约25万个训练样本。在使用所有这些样本时,我得到的是loss = nan和所有预测为nan。但是,当我抽取2000个样本时,我开始获得很好的价值。
编辑5:我的模型似乎不能处理超过2500个训练样本。我试着增加训练规模,在3000或更多的时候,所有的东西都变成了nan。
发布于 2017-07-10 01:47:12
关于您得到的错误-当您指定输入维度时,您需要指定列数,在本例中为400。但是,x[0]只是一个向量,所以它的维数不是形式(None,400),而是(400,1)。例如,如果您定义
x=np.random.rand(20,400)x[0].shape的结果是(400L,)。
因此,您需要相应地重塑您的x[0],例如通过执行x[0].reshape(1,len(x[0]))。
https://stackoverflow.com/questions/44996894
复制相似问题