python-3.x - 如何在不每次训练的情况下对 RNN 进行预测

标签 python-3.x tensorflow keras recurrent-neural-network

我是神经网络新手,我已经成功训练了 RNN,但训练数据需要一段时间。对于我来说,每次想要进行预测时都训练数据是不可行的。那么问题是,如何让训练数据持久化,这样 RNN 就不必每次进行预测时都进行训练?

这是我正在使用的代码...

 from sklearn import preprocessing
 from sklearn.model_selection import train_test_split
 from keras.models import Sequential
 from keras.layers import Dense
 from keras.utils.data_utils import pad_sequences


 class Predict:

TrainingData    = None
XScale          = None


def __init__(self,PredData,TrainingData):


    PreparedData = self.PrepareData(PredData,TrainingData)

    #set the training data

    self.Train(PreparedData)

    #split all of the training data into their respective variables


    X_train, X_val_and_test, Y_train, Y_val_and_test    = train_test_split(self.XScale, self.Y, test_size = 0.6)
    X_val, X_test, Y_val, Y_test                        = train_test_split(X_val_and_test, Y_val_and_test, test_size = 0.6)

    #define the model
    self.DefineModel(X_train, Y_train, X_val, Y_val)

    #do the prediction
    return self.predict(PredData)


def PrepareData(self, PredData,TrainingData):

    LNumber = 0

    for I in TrainingData:

        if(len(I) > LNumber):
            LNumber = len(I)


    PadData = pad_sequences(TrainingData, maxlen = LNumber, padding = 'post', truncating = 'post')



    return PadData

def Train(self,TrainData):

    min_max_scaler = preprocessing.MinMaxScaler()

    self.X = TrainData[0:10]
    self.Y = TrainData[-10:]





    self.XScale = min_max_scaler.fit_transform(self.X)

def DefineModel(self,X_train, T_train, X_val, Y_val):

    self.model = Sequential([
                                Dense(32, activation = 'relu', input_shape = (10,)),
                                Dense(32, activation = 'relu'),
                                Dense(1, activation  = 'sigmoid'),
                            ])

    self.model.compile(     optimizer   = 'sgd',
                            loss        = 'binary_crossentropy',
                            metrics     = ['accuracy']
                            )

    self.model.fit(         X_train, Y_train,
                            batch_size = 32, epochs = 100,
                            validation_data = (X_val, Y_val))


def predict(self,PredData):

    Self.Prediction = model.predict(PredData)

最佳答案

根据评论中的建议,您可以使用 SavedModel保存您的整个架构+权重。我建议您查看此页面,了解如何 Save and load Keras models .

基本上你只需要像这样保存:

self.model.save('path/to/location')

稍后恢复:

from tensorflow import keras
model = keras.models.load_model('path/to/location')

此外,如果你的训练时间相当长,你还可以考虑使用回调 tf.keras.callbacks.ModelCheckpoint 保存迄今为止最佳模型的检查点。 。您创建回调并将其添加到您的适合中:

checkpoint_filepath = '/tmp/checkpoint'
model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_filepath,
    save_weights_only=True,
    monitor='val_accuracy',
    mode='max',
    save_best_only=True)

# Model weights are saved at the end of every epoch, if it's the best seen so far.
model.fit(X_train, Y_train, batch_size=32, epochs=100,
          validation_data=(X_val, Y_val), callbacks=[model_checkpoint_callback])

如果您的火车发生事故或中断,您可以重新加载最佳权重,如下所示:

# The model weights (that are considered the best) are loaded into the model.
model.load_weights(checkpoint_filepath)

请注意,如果您重新启动脚本,则必须重新创建模型对象:load_weights不会像它那样为您重新创建架构 load_model 。但这只是你的情况,首先要做的事情:

self.model = Sequential([
       Dense(32, activation = 'relu', input_shape = (10,)),
       Dense(32, activation = 'relu'),
       Dense(1, activation  = 'sigmoid'),
])

关于python-3.x - 如何在不每次训练的情况下对 RNN 进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73480889/

相关文章:

tensorflow - 如何解决导入某些 TensorFlow 库时出现 'TypeError: Descriptors cannot be created directly' 错误?

python - eval_metric_ops 显示在张量板上的 family 下

python - 当batch_size与数据量不匹配时,Keras自定义生成器

tensorflow - Keras TimeDistributed Not Masking CNN模型

python - 迭代到多级 pandas DataFrame 的优雅方法

python - 将生成的轮文件复制到目的地

python - 检查输入 : expected lstm_1_input to have 3 dimensions, 时出错,但仅在 epoch>1 和特定数据集拆分时得到形状为 (0, 1) 的数组

python - Keras模型训练内存泄漏

python - BeautifulSoup soup.select 切断子标签

python - 安装没有依赖项的python包