之前一直在用pytorch,最近需要用到tensorflow,遇到了很多问题,记录一下下
- 首先是使用tensorflow,如何进行数据的标准化
首先不同框架默认的通道顺序
tensorflow: NHWC
OpenCV: NHWC
pytorch: NCHW
tensorflow的通道在最后。
首先为什么需要进行数据处理:总结起来我的理解是,相当于把数据放在同一个坐标系下,这样特征对于网络来说更明显。
然后标准化方法
蒋竺波:CNN 入门讲解:什么是标准化(Normalization)?zhuanlan.zhihu.com纠结了很久归一化和标准化,总结一下,大概是,归一化和常说的标准化是将数据进行处理的不同方式,常用的标准化是Z-score标准化,就是减去mean,再除以均值。
x = (x - u)/σ
- u: 所有样本数据的均值
- σ: 为所有样本数据的标准差
还有针对一张图片的标准化公式。
Z-score标准化用tensorflow实现时:
original_image = (original_image - np.array(self.mean)) / np.array(self.std)
mean和std额外求出。
目前暂时没发现这样处理不对,有问题请告诉我。
2.tensorflow使用gpu
如何在tensorflow中使用gpu运算呢
在pytorch中,如果想要使用gpu,首先在main.py函数里加上调用gpu的命令
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
然后再使用模型时,以及带有梯度的变量都需要加上.cuda( )这个属性。
然而在tensorflow中,并没有.cuda( )这个语句。目前为止我了解到的,在tensorflow中使用gpu,就在main.py里加上gpu调用就好了,不需要给model和变量加.cuda( )之类的东西。在tensorflow中也可以使用:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
也可以:
with tf.device('/gpu:7'):
……
main()
当然还可以进行更精细的操作。
3. 遇到了用了gpu,gpu也有内存占用,但是非常少,只有150m,这是怎么回事呢
后来发现了,原来tensorflow版本和cuda cudnn版本不匹配
tensorflow 2.0.0
cuda 10.0
然而我的是cuda10.1,所以我应该用tensorflow2.1.0
tensorflow 2.1.0
cuda 10.1
cudnn 7.6
换完tensorflow 2.1.0之后就可以使用gpu了,但还是会报找不到一个文件的错误,但是似乎没影响训练,好像跟TensorRT有关,先不管了吧,这不是目前最紧要的问题
……………………………………剩下的就是一些碎碎念了……………………………………………………………
科研中失败居多,成功是很少的情况,但感觉真是很不想接受一次一次的实验效果不好,加上这个课题没有师兄师姐的经验,显得似乎更难了一些,不知道这是不是一种心理暗示,可能就算有师姐师兄的经验照样帮不上什么忙。想想叶修,已经站在顶峰了,但还是有从头再来的勇气和魄力,所以能再次回到荣耀之巅吧。一般人达到顶峰之后,可能怕失去荣耀的自己会遭到别人的嘲笑,害怕自己失去得到的这些,所以不敢失败了,更不敢从头开始,可能这也是叶修为什么叫君莫笑吧。从头开始,请诸君莫笑。恩,很洒脱
恩,加油加油~