Keras模型预测数字序列

时间:2017-09-01 13:36:47

标签: machine-learning neural-network keras lstm recurrent-neural-network

我正在尝试训练Keras LSTM模型以预测序列中的下一个数字。

  1. 我的模型下面有什么问题,如何在模型未学习时进行调试
  2. 如何决定使用哪种图层类型
  3. 在编译时
  4. 应该在什么基础上选择损失和优化器参数

    我的输入训练数据有形状(16000,10),如下所示

    hdf5

    相应的输出训练数据具有如下形状(16000,1)

    [
        [14955 14956 14957 14958 14959 14960 14961 14962 14963 14964]
        [14731 14732 14733 14734 14735 14736 14737 14738 14739 14740]
        [35821 35822 35823 35824 35825 35826 35827 35828 35829 35830]
        [12379 12380 12381 12382 12383 12384 12385 12386 12387 12388]
        ...
    ]
    

    由于LSTM抱怨,我改编了培训/测试数据

    [[14965] [14741] [35831] [12389] ...]
    

    这是最终的培训/测试数据形状

    X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
    X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
    

    这是我的模特

    Total Samples: 20000
    X_train: (16000, 10, 1)
    y_train: (16000, 1)
    X_test: (4000, 10, 1)
    y_test: (4000, 1)
    

    这是我的输出

    # Model configuration
    epochs = 2
    batch_size = 32
    hidden_neurons = 100
    output_size = 1
    
    # Create the model
    model = Sequential()
    model.add(LSTM(hidden_neurons, input_shape=(X_train.shape[1], X_train.shape[2])))
    model.add(Dense(output_size))
    model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['accuracy'])
    print(model.summary())
    model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size)
    
    scores = model.evaluate(X_test, y_test, batch_size=batch_size, verbose=0)
    print("Model Accuracy: %.2f%%" % (scores[1]*100))
    

2 个答案:

答案 0 :(得分:2)

试试这段代码:

Node - 172.28.1.100
ERROR:
Description = Access is denied.

一般来说,很难帮助你,因为我们需要一种可以重复的例子来测试。但是,这是我的建议:

使用您的NN的超级参数,例如:激活功能,选择功能,层数,学习率等。

更新:

最好先规范化数据。

答案 1 :(得分:1)

准确性不是衡量模型性能的正确方法。与 分类 任务相比,您在此处尝试执行的操作更多是 回归 任务。从你的损失函数中可以看出同样的情况,你正在使用' mean_squared_error '而不是类似' categorical_crossentropy '。

此外,50个时期太少于训练时间。如果您查看日志(在原始问题中),您会看到每个时期的损失减少。你将需要继续训练更多的时代,直到你看到损失已经稳定并且没有进一步减少。

第三,在将数据传递给fit函数之前,您必须对数据进行规范化。这些值非常大,如果没有标准化,算法可能无法收敛。

如果您仍然需要解决此问题,并需要更多帮助,请在评论中告诉我,以便我可以帮助您完成代码。