Я осознаю градиент стохостического спуска RNN, я подготовил свои данные и модель, но получаю с точностью 0 или 1. Моя цель Rnn - получить calsses в финале.
Мой фрейм позже готовит код для онлайн-приложения, для которого мой вход имеет формат (1 | 1 | возможностей) один пакет и одна отметка времени.Затем у меня есть список, подобный этому наблюдению, и я делаю цикл для проверки своего набора данных.У меня есть только этап поезда, потому что это онлайн-кейс.
import numpy as np
import tensorflow as tf
import datetime
import matplotlib.pyplot as plt
xi1 = []
for i in range(10):
i = np.random.rand(1,30)
t.append(i)
yi1 = []
for iss in range(10):
my_list = [0] + [1]
random.shuffle(my_list)
iss = my_list
z.append(iss)
class RnnModel (tf.keras.Model):
def __init__(self, num_classes = 2, units = 64, log_dir = "Draft/gradient_tape/"):
super(RnnModel, self).__init__()
#layer definition
self.lstm1 = tf.keras.layers.LSTM(units, return_sequences=True)
self.danse2 = tf.keras.layers.Dense(units, activation = "elu")
self.dropout1 = tf.keras.layers.Dropout(0.2)
self.danse1 = tf.keras.layers.Dense(num_classes, activation = "softmax")
self.optimizer = tf.keras.optimizers.SGD()
self.loss_object = tf.keras.losses.CategoricalCrossentropy()
self.sample_errors = []
self.log_dir = log_dir
def call(self,inputs):
x1 = inputs
x1 = self.lstm1(x1)
x1 = self.danse2(x1)
x1 = self.dropout1(x1)
return self.danse1(x1)
def checkpoint_callback (self,checkpoint_path):
self.checkpoint = tf.keras.callbaks.ModelChekpoint(checkpoint_path,save_weights_only = True,verbose = 1)
return self.checkpoint
def train_step(self, x1,y1):
with tf.GradientTape() as tape:
predictions = self.call([x1])
loss = self.loss_object(y1,predictions)
gradients = tape.gradient(loss , self.trainable_variables)
self.optimizer.apply_gradients(list(zip(gradients, self.trainable_variables)))
self.train_loss(loss)
self.train_accuracy(y1,predictions)
self.train_test()
self.current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
self.train_log_dir = 'Draft/gradient_tape'
self.train_summary_writer = tf.summary.create_file_writer(self.train_log_dir)
def history_train(self,x1,y1):
for x1_ , y1_ , epo in zip(x1,y1,range(len((x1)))):
x1_ = x1_.values
x1_ = x1_.reshape(-1,1,x1_.shape[1]).astype(np.float32)
y1_ = y1_.values
y1_ = y1_.reshape(-1,y1_.shape[1]).astype(np.float32)
self.train_loss = tf.keras.metrics.Mean(name='train_loss')
self.train_accuracy = tf.keras.metrics.CategoricalAccuracy(name='train_accuracy')
self.sample_errors.append(self.train_loss.result()*100)
self.train_step(x1_,y1_)
with self.train_summary_writer.as_default():
self.summary_loss = tf.summary.scalar('loss',self.train_loss.result(),step = epo)
self.summary_accuarcy = tf.summary.scalar('accuracy', self.train_accuracy.result(), step = epo)
if __name__=="__main__":
model1 = RnnModel()
model1.history_train(xi1,yi1)
Вот как выглядит результат:
["Tensorboard"] (https://ibb.co/Fsx3qtF)
Хотелось бы, чтобы у меня был правильный способ решить эту проблему, и чтобы у меня была правильная точность и потеря.