预测序列中的下一个数字 Keras - Python

Mer*_*hel 2 python numpy neural-network keras tensorflow

我是 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);
Run Code Online (Sandbox Code Playgroud)

给我输出:

[[38.0199]]
Run Code Online (Sandbox Code Playgroud)

这是可以预料的。我不确定我的代码是否有一些愚蠢的错误,希望得到任何反馈和解释。我使用 Dense 是因为我不确定 LSTM 究竟是做什么的。另一件事是,我的模型在指定时要求输入具有 2 个维度:

input_dim=1
Run Code Online (Sandbox Code Playgroud)

我不明白为什么。接下来,我想创建一个网络,可以预测像 [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)));
Run Code Online (Sandbox Code Playgroud)

尽管如此,这些预测还是很不理想。对于给定的测试数据,输出:

[[27.616932]
 [28.265278]]
Run Code Online (Sandbox Code Playgroud)

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

Mih*_*nut 6

这是可以预料的。我不确定我的代码是否有一些愚蠢的错误,希望得到任何反馈和解释。我使用 Dense 是因为我不确定 LSTM 到底做了什么。

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

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

metric你使用-metrics=['accuracy']对应于一个分类问题。如果要进行回归,请删除metrics=['accuracy']. 也就是说,只需使用

model.compile(optimizer = 'adam',loss = 'mean_absolute_error')
Run Code Online (Sandbox Code Playgroud)