Всем привет!
Нужна помощь по LSTM сетям.
Ниже я привёл упрощенный для примера код, который использовал для анализа данных, но для улучшения результатов необходимо применить хотя бы два слоя LSTM.
К сожалению мне не удалось разобраться с правильным формированием входных данных для LSTM сети. В интернете много информации на английском, которым я не владею, (так же python и keras для меня новая среда).
Пожалуйста, нужна ваша помощь - доработать мой пример, что бы была возможность обработки данных LSTM сетью. Или как мне сделать то же самое LSTM сетью?
Заранее благодарю!
import tensorflow as tf
import numpy as np
# Генератор данных
#
# Создаю массивы для обучения и для теста:
# dat - здесь данные
# dat_label - здесь верные ответы к dat
#
# То же самое для проверочной базы:
# test - данные
# test_label - здесь верные ответы к test
#
# Для примера формирую данные случайным образом random1 + random2 + random3 = label (верный ответ)
#
base_size =1000
dat = np.zeros((base_size, 3))
dat_label = np.zeros((base_size))
for i in range(base_size):
dat[i,0] = np.random.randint(0, 100)
dat[i,1] = np.random.randint(0, 100)
dat[i,2] = np.random.randint(0, 100)
dat_label[i] = dat[i,0] + dat[i,1] + dat[i,2]
pass
test = np.zeros((base_size, 3))
test_label = np.zeros((base_size))
for i in range(base_size):
test[i,0] = np.random.randint(0, 100)
test[i,1] = np.random.randint(0, 100)
test[i,2] = np.random.randint(0, 100)
test_label[i] = test[i,0] + test[i,1] + test[i,2]
pass
###############################
# вычисления
###############################
model = tf.keras.Sequential([
tf.keras.layers.Dense(3, input_shape=(3, ) ),
tf.keras.layers.Dense(2),
tf.keras.layers.Dense(1)])
model.compile(loss=['mse'], optimizer = 'rmsprop')
history = model.fit(dat, dat_label, epochs = 10, verbose = 0, batch_size = 1, validation_data=(test, test_label))
##########################################
# Ниже блок для оценки точности ответов
##########################################
predict_dat = model.predict(dat)
predict_test = model.predict(test)
print("----------predictions----------")
dat_ok_summ=0 # количество верных ответов по базе обучения
test_ok_summ=0 # количество верных ответов по базе теста
for i in range(base_size): # Считаем количество верных ответов по базам dat и test
#print(dat[i,0], dat[i,1], dat[i,2], dat_label[i], "predic=",predict_dat[i])
if (dat_label[i]-predict_dat[i])<0.1: dat_ok_summ=dat_ok_summ+1 # Ответы с погрешностью меньше 0.1 засчитываем как верные
if (test_label[i]-predict_test[i])<0.1: test_ok_summ=test_ok_summ+1 # Ответы с погрешностью меньше 0.1 засчитываем как верные
pass
print("Точность ответов по базе обучения:", (dat_ok_summ*100)/base_size, "%")
print("Точность ответов по базе теста :", (test_ok_summ*100)/base_size, "%")
print("Loss: ")
print("База обучения:", model.evaluate(dat, dat_label, verbose=0) )
print("База теста :", model.evaluate(test, test_label, verbose=0) )