首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras:进行预测时的ValueError,准确率为零

Keras:进行预测时的ValueError,准确率为零
EN

Stack Overflow用户
提问于 2017-07-09 21:24:55
回答 1查看 477关注 0票数 2

我用Keras编写了以下模型,但在进行预测时,我遇到了ValueError (在代码后面声明)。我在StackOverflow上查看了其他问题,但只找到了this one,但我无法理解答案是什么。

我正在尝试建立一个网络,它以X为输入,具有200个神经元的隐藏,最后是一个σ神经元来预测输出类别。目标是二进制分类。

模型的输入是(n X 400)作为X,(n,1)作为Y。X和Y都是数值数组。代码和错误消息如下。此外,神经网络的结果是:损失=无穷大,精确度= 0.0,这意味着我这边的某些东西显然是错误的。

代码语言:javascript
复制
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

我按如下方式训练模型:

代码语言:javascript
复制
estimator = KerasClassifier(build_fn=create_baseline, nb_epoch=5, batch_size=5, verbose=1)
estimator.fit(X, Y)

我试着用以下几点来预测:

代码语言:javascript
复制
estimator.predict(X[0])

我收到以下错误:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 01:47:12

关于您得到的错误-当您指定输入维度时,您需要指定列数,在本例中为400。但是,x[0]只是一个向量,所以它的维数不是形式(None,400),而是(400,1)。例如,如果您定义

代码语言:javascript
复制
x=np.random.rand(20,400)

x[0].shape的结果是(400L,)

因此,您需要相应地重塑您的x[0],例如通过执行x[0].reshape(1,len(x[0]))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44996894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档