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