按顺序预测下一个数字Keras - Python

时间:2018-06-11 09:24:23

标签: python numpy tensorflow neural-network keras

我是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]]

我现在没有想法:(根本没有感觉到。

1 个答案:

答案 0 :(得分:3)

  

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

LSTM代表长期短期记忆,是一种特殊的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')