我是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]]
我现在没有想法:(根本没有感觉到。
答案 0 :(得分:3)
这是可以预料的。我不确定我的代码是否有些愚蠢 其中的错误,将不胜感激任何反馈和解释。我用了 密集因为我不确定LSTM究竟做了什么。
LSTM
代表长期短期记忆,是一种特殊的RNN
,能够学习长期依赖。此外,它随着时间的推移主要使用sequential processing
。例如,如果您想预测 Google股票价格,则可以使用LSTM
。
由于您必须按顺序预测下一个数字,如[1, 4, 9, 16, 25]
,这意味着它是回归学习系统模型,属于监督学习。当您使用regression
模型时,没有accuracy
。来自回归的准确性模拟它称为COD
或Coefficient of determination
或R squared score。
您使用的metric
- metrics=['accuracy']
对应分类问题。如果您要执行回归,请删除metrics=['accuracy']
。也就是说,只需使用
model.compile(optimizer = 'adam',loss = 'mean_absolute_error')