【问题标题】:Predictions using a Keras Recurrent Neural Network - accuracy is always 1.0使用 Keras 循环神经网络进行预测 - 准确度始终为 1.0
【发布时间】:2015-12-22 16:08:36
【问题描述】:

TLDR:如何使用 Keras RNN 预测序列中的下一个值?


我有一个顺序值列表。我想将它们输入 RNN 以预测序列中的下一个值。

[ 0.43589744  0.44230769  0.49358974 ...,  0.71153846  0.70833333 0.69230769]

我正在使用 Keras 来执行此操作,并且可以得到一个损失减少但准确度始终为 1.0 的网络。这是错误的。 y_tests != model.predict(x_tests).

Epoch 0
1517/1517 [==============================] - 0s - loss: 0.0726 - acc: 1.0000 - val_loss: 0.0636 - val_acc: 1.0000
Epoch 1
1517/1517 [==============================] - 0s - loss: 0.0720 - acc: 1.0000 - val_loss: 0.0629 - val_acc: 1.0000
...

这是我的网络。

model = Sequential()
model.add(SimpleRNN(1, 100))
model.add(Dense(100, 1, activation = "sigmoid"))
model.compile(loss="mean_squared_error", optimizer = "sgd")

我尝试过 SimpleRNN、GRU 和 LSTM,但都没有成功。以下是数据的格式。

# Current value
y_train = [[ 0.60576923] [ 0.64102564] [ 0.66025641] ..., [ 0.71153846] [ 0.70833333] [ 0.69230769]]

# Previous 10 values
x_train_10 = [
    [[ 0.65064103] [ 0.66346154] [ 0.66346154] ..., [ 0.72115385] [ 0.72435897] [ 0.71153846]] ...,
    [[ 0.66346154] [ 0.66346154] [ 0.67628205] ..., [ 0.72435897] [ 0.71153846] [ 0.70833333]]
]

# Previous value
x_train_1 = [[ 0.58333333] [ 0.60576923] [ 0.64102564] ...,  [ 0.72435897] [ 0.71153846] [ 0.70833333]]

# So here are the shapes...
y_train.shape    = (1895, 1)
x_train_10.shape = (1895, 10, 1)
x_train_1.shape  = (1895, 1)

x_train_10 中的每个元素都是前 10 个值的列表。我将其格式化为遵循 Keras 的文档,即循环层采用形状为 (nb_samples, timesteps, input_dim) 的输入。

我也尝试过使用Embedding 层,但没有成功。 (这可能是错误的使用方式——我只看到它用于分类而不是预测)。

model = Sequential()
model.add(Embedding(1, 30))
model.add(LSTM(30, 100))
...

pad_sequences 也不起作用。

x_train_1 = sequence.pad_sequences(x_train_1, maxlen = None, dtype = "float32")

我想让 RNN 使用这个简单的数据/架构,这样我以后可以用它来解决更复杂的问题。

谢谢:)

【问题讨论】:

    标签: python neural-network


    【解决方案1】:

    试试 RMSProp 作为优化器

    model.compile(loss="mean_squared_error", optimizer = 'rmsprop')
    

    【讨论】:

      【解决方案2】:

      我发布了一个similar question on the Keras Github 页面并得到了一个很好的答案。


      lukedeo表示acc: 1.0000表示真实输出和预测输出都大于0.5,反之亦然。相反,我应该查看损失或mse,以确定模型的准确性。这是因为我的网络是回归而不是分类器/聚类器。

      均方根误差是准确度的一个很好的衡量标准。 accuracy_percent = 1 - np.sqrt(mse)


      fchollet(Keras 的创建者)详细阐述说“准确性与回归问题完全无关。”

      在进行分类问题时,可以根据目标(网络输出)在model.comple(...) 中将class_mode 设置为'categorical''binary',从而提高准确性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 2020-06-07
        • 2020-05-15
        • 2019-06-13
        • 1970-01-01
        • 2020-02-23
        相关资源
        最近更新 更多