R
R
Ram7772020-11-12 20:34:46
Python
Ram777, 2020-11-12 20:34:46

You need to upgrade the network to LSTM. Or how can I do the same with an LSTM network?

Hello!
Need help with LSTM networks.
Below I have given a simplified example of the code that I used to analyze the data, but to improve the results, you need to apply at least two layers of LSTM.
Unfortunately, I was not able to figure out the correct formation of input data for the LSTM network. There is a lot of information on the Internet in English, which I do not speak (also python and keras are a new environment for me).

Please, I need your help to improve my example so that it would be possible to process LSTM data by the network. Or how can I do the same with an LSTM network?
Thank you in advance!

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) )

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Andrey Dugin, 2020-11-13
@adugin

To prepare the data, you can use the TimeseriesGenerator

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question