Почему в моей доске тензорных потоков и метриках я всегда получаю значения точности 0 или 1 - PullRequest
0 голосов
/ 20 июня 2019

Я осознаю градиент стохостического спуска 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)

Хотелось бы, чтобы у меня был правильный способ решить эту проблему, и чтобы у меня была правильная точность и потеря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...