终于解决了模型训练每次结果不同的问题

1、解决方法

1、确保每次实验(上一次和下一次)的批次数据按顺序一致,具体而言是保证每次实验训练过程中每个epoch的数据之间是不同的,但是又要保证上一次和下一次实验中的epoch数据按顺序一致;
截取部分代码如下:

for epoch in range(config.num_epochs):
     # print('Epoch:', epoch + 1)
     seed_id = epoch
     batch_train = batch_iter2(x_train, y_train, seed_id, config.batch_size)

def batch_iter2(x, y, seed_id, batch_size):
    """生成批次数据"""
    data_len = len(x)
    num_batch = int((data_len - 1) / batch_size) + 1
    np.random.seed(seed_id)  # 设置每个epoch的随机种子,保证每个epoch的数据不同,但是下次实验时又和上次实验一致
    indices = np.random.permutation(np.arange(data_len))  # 随机产生一个序列,或是返回一个排列范围
    x_shuffle = x[indices]
    y_shuffle = y[indices]

    for i in range(num_batch):
        start_id = i * batch_size
        end_id = min((i + 1) * batch_size, data_len)
        yield x_shuffle[start_id:end_id], y_shuffle[start_id:end_id]

2、一般神经网络中会使用dropout超参数,要保证每次实验的随机丢失是一致的;

tf.set_random_seed(seed)

2、注意

(1)切换环境会使得随机种子生成数据和上一次环境不同;
(2)不切换环境时,可以在训练之前重置计算图,tf设置随机种子也可放在此处;

 tf.reset_default_graph()
 tf.set_random_seed(2022)
 model = TextCNN(config)
 train(train_dir, save_dir, val_dir, save_path, word_to_id, cat_to_id, config, model)
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值