Я новичок в питоне и нейронных сетях.У меня есть простая сеть, написанная в Керасе, которая может предсказать следующее число в линейной последовательности:
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]]
В данный момент у меня нет идей :(. Не чувствую этого вообще.