【发布时间】:2017-12-13 07:02:47
【问题描述】:
我在 Keras 中编写了以下模型,但是在进行预测时,我遇到了 ValueError(在代码之后说明)。我查看了 StackOverflow 上的其他问题,但只找到了 this one,但我无法理解答案在说什么。
我正在尝试构建一个网络,它以 X 作为输入并隐藏 200 个神经元,最后是一个 sigmodial 神经元来预测输出类。目标是二分类。
模型的输入是 (n x 400) 作为 X 和 (n, 1) 作为 Y。X 和 Y 都是 numpy 数组。代码和错误信息如下。此外,神经网络的结果是:Loss = Infinite 和 Accuracy = 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。
【问题讨论】:
-
你能在这里提供完整的代码,包括一些数据 X,Y 吗? (不一定是您的具体数据,它可能只是一个玩具示例,以便读者能够运行您的代码)
标签: python keras keras-layer