【发布时间】: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