【问题标题】:Predicting next numbers in sequence Keras - Python预测序列中的下一个数字 Keras - Python
【发布时间】:2018-11-20 12:09:21
【问题描述】:

我是 python 和神经网络的新手。我有一个用 Keras 编写的简单网络,可以预测线性序列中的下一个数字:

import numpy as np

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

data = [[i for i in range(6)]];
data = np.array(data, dtype=int);
target = [[i for i in range(10, 16)]];
target = np.array(target, dtype=int);

model = Sequential();
model.add(Dense(1, input_dim=1))
model.add(Dense(1));
model.compile(loss='mean_absolute_error', optimizer = 'adam', metrics = ['accuracy']);
model.summary();
for i in range (10000):
    dataIterator = 0;
    for targetValue in target:
        model.train_on_batch(data[dataIterator], targetValue)
        dataIterator = dataIterator + 1;

predict = model.predict([28]);
print(predict);

给我输出:

[[38.0199]]

这是意料之中的。我不确定我的代码中是否有一些愚蠢的错误,如果有任何反馈和解释,我将不胜感激。我使用 Dense 是因为我不确定 LSTM 究竟做了什么。另一件事是我的模型在指定时要求输入具有 2 个维度:

input_dim=1

我不明白为什么。接下来,我想创建一个可以预测序列中的下一个数字的网络,例如 [1, 4, 9, 16, 25]。这个没有。

请注意,这是我用 Python 编写的第一个程序,也是第一次使用神经网络 :)。提前致谢!

更新 1

根据使用规模的提示,我想出了这样的事情:

import numpy as np

from keras.models import Sequential
from pandas import Series
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import StandardScaler

data = [[i for i in range (1,30)]];
data = np.array(data, dtype=int);
target = np.power(data, 2);
target = np.array(target, dtype=int);
target = target.reshape((len(target[0]), 1))
data = data.reshape((len(data[0]), 1))

scale = StandardScaler()

dataTest = [[i for i in range (2,4)]];
dataTest = np.array(dataTest, dtype=int);
dataTest = dataTest.reshape((len(dataTest[0]), 1))

model = Sequential();
model.add(Dense(1, input_dim=1))
model.add(Dense(1));
model.compile(loss='mean_absolute_error', optimizer = 'adam');
model.fit(scale.fit_transform(data), target, batch_size=1, epochs=200, verbose=1)

print(model.predict(scale.transform(dataTest)));

尽管这个预测很不理想。对于给定的测试数据,输出:

[[27.616932]
 [28.265278]]

我现在没有想法 :(。完全没有感觉。

【问题讨论】:

    标签: python numpy tensorflow neural-network keras


    【解决方案1】:

    这是意料之中的。我不确定我的代码是否有些愚蠢 其中有错误,将不胜感激任何反馈和解释。我用了 密集,因为我不确定 LSTM 到底是做什么的。

    LSTM,代表Long-short-term memory,是RNN的一种特殊类型,能够学习长期依赖。此外,随着时间的推移,它的使用主要是sequential processing。例如,当您想要预测 Google 股票价格时,您可以使用LSTM

    由于您必须像[1, 4, 9, 16, 25] 这样按顺序预测下一个数字,这意味着它是一个回归学习系统模型,属于监督学习。当您使用regression 模型时,没有accuracy回归模型的准确性称为CODCoefficient of determinationR squared score

    您使用的metric-metrics=['accuracy'] 对应于分类问题。如果您想做回归,请删除metrics=['accuracy']。也就是说,只需使用

    model.compile(optimizer = 'adam',loss = 'mean_absolute_error')
    

    【讨论】:

    • 感谢您的回答,我根据您所说的更改了代码,更改如下:data = [[1, 2, 3, 4, 5, 6]];data = np.array(data, dtype=int);target = [[1, 4, 9, 16, 25, 36]];target = np.array(target, dtype=int);...model.compile(loss='mean_absolute_error', optimizer = 'adam');... 并预测如前所述:1=[[-3.0016935]]2=[[3.9975564]]3=[[10.996807]]4=[[17.996058]]5=[[24.995306]]6=[[31.994558]]7=[[38.99381]]不知道这里出了什么问题:(
    • 你需要使用更多的数据,不要忘记缩放。
    • 更多数据听起来合乎逻辑,但您想到的扩展是什么?对不起,我缺乏知识,我对 Python 和 Keras 完全陌生。
    • @ElKrystiano,看看 StandardScaler。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2020-03-21
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多