保存权重的方式+设置学习率下降的方式+早停的方式+history的保存与加载

from keras.callbacks import TensorBoard, ModelCheckpoint, ReduceLROnPlateau, EarlyStopping

    # 保存的方式,3世代保存一次
    checkpoint_period = ModelCheckpoint(
                                    log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',
                                    monitor='val_loss', 
                                    save_weights_only=True, 
                                    save_best_only=True, 
                                    period=3
                                )
    # 学习率下降的方式,val_loss3次不下降就下降学习率继续训练
    reduce_lr = ReduceLROnPlateau(
                            monitor='val_loss', 
                            factor=0.5, 
                            patience=3, 
                            verbose=1
                        )
    # 是否需要早停,当val_loss一直不下降的时候意味着模型基本训练完毕,可以停止
    early_stopping = EarlyStopping(
                            monitor='val_loss', 
                            min_delta=0, 
                            patience=10, 
                            verbose=1
                        )

然后训练的时候:

    # 开始训练
    model.fit_generator(generate_arrays_from_file(lines[:num_train], batch_size),
            steps_per_epoch=max(1, num_train//batch_size),
            validation_data=generate_arrays_from_file(lines[num_train:], batch_size),
            validation_steps=max(1, num_val//batch_size),
            epochs=50,
            initial_epoch=0,
            callbacks=[checkpoint_period, reduce_lr,early_stopping])

    model.save_weights(log_dir+'last1.h5')

值得借鉴的地方有:

  1. 保存模型的时候(这里设置每三个epochs保存一次)
    log_dir + ‘ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5’
    这里给槽的方式并没有用.format这种落后的形式,而是用这种带冒号的形式

  2. 注意调用三者的是:callbacks=[checkpoint_period, reduce_lr,early_stopping])

最后补充保存和加载history的方式:

保存

# # history的保存
import pickle
with open('model_vi_bs_128_lrdefault_hist.pickle', 'wb') as file_pi:
        pickle.dump(history.history, log_dir+file_pi)

加载

import pickle
with open('logs/model_vi_bs_128_lrdefault_hist.pickle','rb') as fr:
    history = pickle.load(fr)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以提供一个基于TensorFlow和Keras的循环神经网络情感分析模型的代码实现。此外,我还会演示如何保存加载模型权重,以及如何进行模型训练。下面是完整的代码实现: 首先,我们需要导入必要的库和模块: ```python import pandas as pd import numpy as np import tensorflow as tf from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout ``` 接下来,我们需要加载我们的数据集。在这里,我将使用一个CSV格式的数据集。您可以使用Pandas库中的read_csv()函数来读取CSV文件,并将其转换为DataFrame。 ```python df = pd.read_csv('sentiment_dataset.csv') ``` 接着,我们需要将数据集分成训练集和测试集。在这里,我将使用sklearn库中的train_test_split()函数。 ```python X_train, X_test, y_train, y_test = train_test_split(df['text'], df['sentiment'], test_size=0.2, random_state=42) ``` 接下来,我们需要对我们的文本数据进行预处理。在这里,我们将使用Tokenizer类来将我们的文本数据转换为数值序列。我们将使用max_words参数来限制我们的词汇表大小。此外,我们还将使用maxlen参数来限制每个文本序列的长度。 ```python max_words = 10000 maxlen = 200 tokenizer = Tokenizer(num_words=max_words) tokenizer.fit_on_texts(X_train) X_train_seq = tokenizer.texts_to_sequences(X_train) X_test_seq = tokenizer.texts_to_sequences(X_test) X_train_pad = pad_sequences(X_train_seq, maxlen=maxlen) X_test_pad = pad_sequences(X_test_seq, maxlen=maxlen) ``` 接着,我们需要定义我们的模型。在这里,我们将使用一个简单的LSTM模型。我们将使用Embedding层来将我们的数值序列转换为词嵌入向量。然后,我们将使用一个LSTM层来对我们的序列数据进行建模。最后,我们将使用一个Dense层来输出我们的情感分析结果。 ```python model = Sequential() model.add(Embedding(max_words, 32, input_length=maxlen)) model.add(LSTM(64, dropout=0.2, recurrent_dropout=0.2)) model.add(Dense(1, activation='sigmoid')) ``` 接下来,我们需要编译我们的模型。在这里,我们将使用binary_crossentropy作为我们的损失函数,因为我们是在执行二元分类任务。我们还将使用Adam优化器,并设置我们的学习率为0.001。最后,我们将使用准确率作为我们的性能指标。 ```python model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(lr=0.001), metrics=['accuracy']) ``` 接着,我们可以开始训练我们的模型。在这里,我们将使用fit()函数来训练模型。我们将使用validation_data参数来指定我们的验证集。我们还将设置epochs参数为50,batch_size参数为32。 ```python history = model.fit(X_train_pad, y_train, validation_data=(X_test_pad, y_test), epochs=50, batch_size=32) ``` 训练完成后,我们可以使用evaluate()函数来评估我们的模型在测试集上的性能表现。 ```python model.evaluate(X_test_pad, y_test) ``` 接下来,我们可以使用save_weights()函数来保存我们的模型权重。 ```python model.save_weights('model_weights.h5') ``` 如果您想要保存整个模型,而不仅仅是模型权重,您可以使用save()函数。 ```python model.save('model.h5') ``` 接下来,我们可以使用load_weights()函数来加载我们保存的模型权重。 ```python model.load_weights('model_weights.h5') ``` 如果您想要加载整个模型,而不仅仅是模型权重,您可以使用load_model()函数。 ```python model = tf.keras.models.load_model('model.h5') ``` 现在,我们已经完成了循环神经网络情感分析模型的搭建、训练、保存加载。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值