Обучение предварительно обученной модели в керасе - PullRequest
0 голосов
/ 12 октября 2019

Я тренирую модели на полученных данных и проверяю эти модели на новых данных. Если модели работают не так, как хотелось бы, я должен генерировать новые модели с новыми данными (new_data + old_data). Поскольку обучение требует времени, я пытался обучать модели, которые у меня были, но из-за масштабирования (нормализации) старых моделей с новыми данными (new_data + old_data) эти модели не будут хорошо работать во время новых тренировочных сессий, и тренировка будет бесполезной. их вместо генерации новых моделей. Есть ли решение для них, которое стирает ошибку нормализации, чтобы старые модели могли эффективно обучаться? Пока я тренирую заранее обученные модели, я использую код ниже:

    import time
    import warnings
    import numpy as np
    import random
    import pandas as pd
    import smtplib
    import schedule
    from datetime import datetime 
    from sklearn.preprocessing import MinMaxScaler
    from keras.layers.core import Dense, Activation, Dropout
    from keras.layers.recurrent import LSTM
    from keras.layers import Bidirectional
    from keras.models import Sequential
    from keras.callbacks import ModelCheckpoint
    from keras.callbacks import ReduceLROnPlateau
    from keras import optimizers
    from keras import metrics
    from keras.models import load_model
    from keras.layers import Dense, LSTM, CuDNNLSTM, BatchNormalization, Bidirectional, Dropout, Activation, LeakyReLU
    warnings.filterwarnings("ignore", category = FutureWarning)
    pd.set_option('display.max_columns', None)  
    pd.set_option('display.expand_frame_repr', False)
    pd.set_option('max_colwidth', -1)
    seq_len = 50
    train_test_ratio = 0.0
    df = pd.read_csv('datasets/dk1007-0810LTCabc.csv', dtype=float, header=None)
    model = load_model('models/LTC4/RNN_Final-56-0.02')
    df[df == 0] = 1
    df1  = df.iloc[:, :]
    ##y_df1 = df1.iloc[:,10:11]#,asks1[1:2],askamount[2:3],bids1[3:4],bidsamount[4:5],price[5:6],price_5m_change[6:7],price_10m_change[7:8],price_15m_change[8:9],price_20m_change[9:10],price_30m_change[10:11],price_60m_change[11:12],asks1_change,bids1_change,asksamount/bidsamount,price_change_1m
    y_df1 = df1.iloc[:,6:7]#,asks1[1:2],askamount[2:3],bids1[3:4],bidsamount[4:5],price[5:6],price_5m_change[6:7],price_10m_change[7:8],price_15m_change[8:9],price_20m_change[9:10],price_30m_change[10:11],price_60m_change[11:12],price_60m_change_target[12:13],price_30m_change_target[13:14],price_20m_change_target[14:15],price_15m_change_target[15:16],price_10m_change_target[16:17],price_5m_change_target[17:18],asks1_change,bids1_change,asksamount/bidsamount,price_change_1m

    df = df1.iloc[:,12:]

    ts = 0
    scaler = MinMaxScaler()
    df = scaler.fit_transform(df)

    scaler2 = MinMaxScaler()
    y_df = scaler2.fit_transform(y_df1)
    df1 = (df,y_df)
    seq_data  = []
    data_X = []
    data_Y = []

    for i in range(0,len(df)-seq_len):
        dft = df1[0][i:i+seq_len]
        seq_data.append([dft, df1[1][i+seq_len]])
    random.shuffle(seq_data)
    for i in range(0, len(df)-seq_len):
    ##    if seq_data[i][1][0] != 0.5417594375446555:
        data_X.append(seq_data[i][0])
        data_Y.append(seq_data[i][1])
    X_train = np.array(data_X)
    Y_train = np.array(data_Y)

    #split into train and testing data
    row = round(train_test_ratio * X_train.shape[0])
    x_test = X_train[:int(row), :]
    x_train = X_train[int(row):,:]
    y_test = Y_train[:int(row)]
    y_train= Y_train[int(row):]

    print("X_train:", x_train.shape)
    print("y_train:", y_train.shape)
    print("X_test:", x_test.shape)
    print("y_test:", y_test.shape)


    filepath = "RNN_Final-{epoch:02d}-{val_loss:.2f}"  # unique file name that will include the epoch and the validation loss for that epoch
    checkpoint = ModelCheckpoint("models/{}".format(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')) # saves only the best ones
    reduce_lr = ReduceLROnPlateau(monitor = "val_loss", factor = 0.75, patience = 15,
                                             verbose = 1, mode = "auto", min_delta = 1e-04, cooldown = 5,
                                              min_lr = 0)

    start = time.time()
    model.fit(x_train, y_train, batch_size=16, epochs=500, validation_split=0.1, callbacks=[checkpoint, reduce_lr])
    model.save('0310_5m')
    print('training time : ', time.time() - start)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...