在做科研时使用tensorflow作为算法开发工具。后来有了更好用的pytorch之后,由于很多基础代码都是用tensorflow编写的,所以,就没有转到pytorch上来。

最近在写论文,比较重视算法的可复现性,发现在tensorflow中,相同的参数设置,相同的种子设置,相同的输入数据,相同的优化器,相同的初始化参数,在训练过程中会有不同的损失,且随着迭代次数的增加,这种“损失差异”的积累最终会导致准确率差异较大的实验结果。同一组参数多组实验,实验结果浮动较大,差异之大使自己无法确认自己工作的有效性,导致在实验分析时无法做控制变量分析。

在网上查找了很多如何固定tensorflow参数,使实验过程可复现的方法,但是无一例外都不work,于是无奈只能转为pytorch。

这里主要记录一下自己在“tensorflow实验过程可重复”上做的调查和测试。

最基本的,要指定各种随机种子,然后,安装tensorflow-determinism,

pip install tensorflow-determinism

最后,设置如下:

# -*- coding: utf-8 -*-
import os
import random
import numpy as np
import tensorflow as tf
from keras import backend as K
from tfdeterminism import patchpatch()seed_value = 2021
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
np.random.seed(seed)
tf.set_random_seed(seed)

但是,实验结果是然并卵,完全相同的实验设置,与数据输入过程,训练损失仍旧不同。

注:

  • tensorflow-determinism 要求指定的tensorflow版本,如1.14、1.15或2.0。
  • 我的tensorflow版本就是1.14
  • 然并卵,tfdeterminism并没有帮助,训练过程仍旧没有复现。

所以,听劝,用pytorch吧:

pytorch的设置如下,实验过程完全可复现。

import numpy as np
import torch
seed=args.seed
torch.manual_seed(seed)            # 为CPU设置随机种子
torch.cuda.manual_seed(seed)       # 为当前GPU设置随机种子
torch.cuda.manual_seed_all(seed)   # 为所有GPU设置随机种子
from torch.backends import cudnn
cudnn.benchmark = False             # if benchmark=True, deterministic will be False
cudnn.deterministic = True
import random
random.seed(seed)
np.random.seed(seed)

参考:tensorflow-gpu/keras的结果可重复_lzw790222124的博客-CSDN博客

tensorflow 实验过程可重复相关推荐

  1. 编译原理逆波兰式实验java_逆波兰式算法的编译原理实验过程.doc

    逆波兰式算法的编译原理实验过程 实验目的 深入理解算符优先分析法 掌握FirstVt和LastVt集合的求法有算符优先关系表的求法 掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化 实验内容及要求 ...

  2. 【神经网络】tensorflow实验10 -- 人工神经网络(1)

    1. 实验目的 ①理解并掌握误差反向传播算法: ②能够使用单层和多层神经网络,完成多分类任务: ③了解常用的激活函数. 2. 实验内容 ①设计单层和多层神经网络结构,并使用TensorFlow建立模型 ...

  3. 【嵌入式AI】CNN模型压缩(剪枝,量化)详解与tensorflow实验

    1,CNN模型压缩综述 1 模型压缩的必要性及可行性 (1)必要性:首先是资源受限,其次在许多网络结构中,如VGG-16网络,参数数量1亿3千多万,占用500MB空间,需要进行309亿次浮点运算才能完 ...

  4. Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题

    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...

  5. 脑电实验注意事项及实验过程中伪迹识别

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Rose分享一篇群友 Tina关于脑电实验的学习笔记,感谢脑机社区群友Tina的分享. 实验前准备 1.填写被试信息及知 ...

  6. 我在Suse 11 Sp3上使用anaconda安装TensorFlow的过程记录

    我在Suse 11 Sp3上使用anaconda安装TensorFlow的过程记录准备安装包: gcc48 glibc-2.18.tar.gz SLES-11-SP4-DVD-x86_64-GM-DV ...

  7. python实验过程心得体会_20192416 实验四《Python程序设计》综合实践报告

    20192416 实验四 <Python程序设计> 综合实践报告 课程:<Python程序设计> 班级:1924 姓名:不愿透露姓名的はんたくさん 学号:20192416 实验 ...

  8. windows环境下tensorflow安装过程详解(亲测安装成功后测试那块)

    写在最前: 在安装过程中遇到很多坑,一开始自己从官网下载了Python3.6.3或者Python3.6.5或者Python3.7.1等多个版本,然后直接pip install tensorflow或者 ...

  9. VRRP浮动路由(浮动路由原理,了解HSRP路由选举原理,实验过程与总结)

    文章目录 前言 单一链路存在的问题 HSRP是思科的私有协议 HSRP (热备份路由选择协议)介绍 VRRP浮动路由原理 Master路由器选举原理 浮动路由原理 实验详解 实验目的 实验过程 主机设 ...

最新文章

  1. 转载:什么才是程序员的核心竞争力
  2. Product Orders(生产订单)状态相关函数BAPI
  3. android查看报错日志,android运行错误日志帮看下 不懂啊
  4. python多久学会自学-python自学多久
  5. Linux系统高并发kernel参数优化
  6. Android Service 形式分类
  7. CodeForces - 1549F1 Gregor and the Odd Cows (Easy)(几何+数论)
  8. java 中random类使用_Java中的天使和魔鬼:Unsafe类
  9. SpringCloud 从菜鸟到大牛之三 服务拆分 理论
  10. 03-09 toast 控件识别
  11. 使用程序简单查询IP地址
  12. 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题
  13. select标签如何设置默认选中的选项
  14. php之sprintf的用法,PHP之sprintf函数用法详解_PHP
  15. 下载Youtube-8m视频,ubuntu安装测试使用
  16. [CF891D]Sloth
  17. 南邮《网络技术与应用,携程开源的分布式apollo技术
  18. 微处理器基本功能及主要性能指标
  19. 开始用巴别小精灵强化英语单词记忆
  20. 微信小程序:页面有内容却不显示原因

热门文章

  1. 常见经典排序算法学习总结(插入、shell、冒泡、选择、归并、快排等)
  2. 队列管理器连接数设置_详解!基于Redis解决业务场景中延迟队列的应用实践,你不得不服啊...
  3. html div右下浮动,div 初始化及左右浮动
  4. mysql安全模式什么意思_mysql安全模式指的是什么意思
  5. python hash表_python数据结构与算法——哈希表
  6. microsoft visual c++全家桶_“网蓝”盒子咖啡新品来袭!顺德第①桶MINI冰摇咖啡,可以背着逛街...
  7. Java写一个app控制电机_java控制步进电机
  8. Python数据结构与算法(1.3)——Python基础之输入、输出与高阶赋值
  9. mysql查询结果输出文件_如何将MySQL查询输出保存到文件?
  10. 学习PriorityQueue源码