学习Tensorflow Pytorch中的一些小Tips

Tensorflow中各种小trick和知识点。从版本对应,到模型生成等都有:(个人记录,快查表)

版本问题

tensorflow 1.13以上   要用CUDA10 对应CuDNN  7.4

1.5-1.12  CUDA9

凸(艹皿艹 )了。

 

查看cuda 版本
cat /usr/local/cuda/version.txt

cudnn 版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

显存查看

nvidia-smi

Pwr:Usage/Cap:能耗表示

Memory-Usage:显存使用率

Volatile GPU-Util:浮动的GPU利用率

anaconda换源

常见换源很简单

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
ssl_verify: true

注意如果需要pytorch, 还需要添加pytorch的镜像:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

将以上配置文件写在~/.condarc
vim ~/.condarc

 

网上找了个很快的

channels:
  - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - defaults
show_channel_urls: true

 

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas

 

共用的服务器看是谁在用显卡

pip install gpustat

gpustat

在这里插入图片描述

查看目录下所有文件大小

du -B G --max-depth=1 /home/DATA/

简单说下,-B G是说我要看的单位是G,别给我整KB

--max-depth=1 是说我只看本层的子文件夹,子文件夹的子文件夹别给我显示出来,眼晕

更多参数查看 du --help

 

 

运行模型时控制显存

使用模型时默认占满所有显存,想控制显存,只使用需要的显存量时

sess_config = tf.ConfigProto(allow_soft_placement=False)
sess_config .gpu_options.allow_growth = True

sess = tf.Session(    config = sess_config    )
sess.run(init)

打印模型中所有的节点

for op in self.graph.get_operations():
    print(op.name)
# or 
for ts in [n.name for n in tf.get_default_graph().as_graph_def().node]:
    print(ts)

将checkpoint模型固化为pb文件

获得模型中节点之后,确定模型的输入输出节点名

self.tensor_image = self.graph.get_tensor_by_name('TfPoseEstimator/image:0')
self.tensor_heatMat = self.graph.get_tensor_by_name('TfPoseEstimator/Mconv7_stage3_l2/BiasAdd:0')
self.tensor_pafMat = self.graph.get_tensor_by_name('TfPoseEstimator/Mconv7_stage3_l1/BiasAdd:0')

自己定义也行

self.tensor_pafMat_up = tf.image.resize_area(self.tensor_pafMat,
              (184,328),align_corners=False,name='upsample_pafmat')

然后模型初始化,确定一些batch等的维度,最好运行一次,毕竟模型定义时有些维度是空着的

peaks,heatMat_up,pafMat_up = self.persistent_sess.run(
    [self.tensor_peaks, self.tensor_heatMat_up, self.tensor_pafMat_up],feed_dict={
        self.tensor_image:[img]
    } )

固化模型

output_graph_def = tf.graph_util.convert_variables_to_constants(self.persistent_sess,self.persistent_sess.graph_def,["Select","upsample_heatmat","upsample_pafmat"])
with tf.gfile.GFile('freeze_pose.pb' , 'wb') as f:

    f.write(output_graph_def.SerializeToString())
# 这个是OpenPose模型,Select节点是输出peaks,打印所有节点才可看到peak节点名为Select

当然,使用Object Detection API时,运行inference.py可以自动得到pb文件和cpkt模型

 

eval定时进行

model.lib文件中

tf.estimator.EvalSpec结构体中,加入一个参数

throttle_secs=10800

定时三小时进行一次eval

张量相关的数值操作

tf.fill(shape,value, name="")

为制定形状填充,例如tf.fill([2,3],1)  ->   [[1 1 1][1 1 1]]

tf.constant(value,shape)

生成常量例如  tf.constant(1, [2,3])  ->  [[1 1 1][1 1 1]]

更详细的参数其实是下面这和

tf.constant(
           value,
           dtype=None,
           shape=None,
           name='Constant',
           vertify_shape=False
)

都是填充,二者区别?

tf.fill只能填充标量,而tf.constant可以填充多种类型

tf.constant(value="demo")

print(sess.run(hello1))后返回 demo

hello2 = tf.constant(value=["demo","1","2"],dtype=tf.string,shape=[2,3])

返回

[['demo' '1' '2']
 ['2' '2' '2']]

区别则在此。

tf.slice(input,begin,size,name=None)数据切片

begin指的是切片起点,size分别是各个维度分别取几个数据,有-1是该维度都取

因而begin、size是list类型,每位一一对应,0 <= begin每位 <= size对应

x=[[1,2,3],[4,5,6]]  
with tf.Session() as sess:
     begin = [0,1]  # 从x[0,1],即元素2开始抽取
     size = [1,2]   
     # 从x[0,1]开始,size[1,2]中  ”1“是 对x的第一个维度(行)抽取1个元素,即只取[1,2,3]
     # “2”是 在对x的第二个维度(列)抽取2个元素,即[2,3]
     print sess.run(tf.slice(x,begin,size))  # 输出[[2 3]]

tf.argmax()最大值的位置

test = np.array([[1, 2, 3], [2, 3, 4], [5, 4, 3], [8, 7, 2]])
np.argmax(test, 0)   #输出:array([3, 3, 1]
np.argmax(test, 1)   #输出:array([2, 2, 0, 0]

怎么解释呢。test中维度是4x3。第二个参数是决定最大值是什么范围里的最大值:

0:比较不同元素中最大的值,一个元素是3维,因而输出三维结果,每个位置3,3,1代表最大值分别在3,3,1号元素中

1:比较每个元素中最大的值,4个元素,输出4维结果,2,2,0,0代表每个元素中最大值的位置

tf.equal的使用

tf.equal(A,B)

相等返回true, 不等返回false , 维度和A 一样

A = [[1,3,4,5,6]]
B = [[1,3,4,3,2]]
 
with tf.Session() as sess:
    print(sess.run(tf.equal(A, B)))

返回[[ True  True  True False False]]

tf.reduce_mean的使用

求平均值

reduce_mean(input_tensor,
                axis=None,
                keep_dims=False,# false是降维
                name=None,
                reduction_indices=None)

np.array格式写到txt中

np.set_printoptions(threshold=np.inf)
然后f.write(str(my_variables))

 

 

Keras

Keras的applications模块中就提供了带有预训练权重的深度学习模型。

该模块会根据参数设置,自动检查本地的~/.keras/models/目录下是否含有所需要的权重,没有时会自动下载,在notebook上下载会占用notebook线程资源,不太方便,因此也可以手动下载后放入该目录。

 

https://colab.research.google.com/github/tensorflow/docs/blob/master/site/zh-cn/tutorials/load_data/images.ipynb#scrollTo=OPs_sLV9pQg5

这段简单的数据处理的代码教程实在看起来费劲,敲了一遍囫囵吞枣还是不太懂。先记下来看以后能不能懂吧。

 

 

Pytorch

精简入门中文教程

http://pytorch123.com/ThirdSection/DataLoding/

Tips

1 任何使张量会发生变化的操作都有一个前缀 '_'。例如:x.copy_(y)

2.  import torchvision.transforms as transforms

torchvision 数据集的输出是范围在[0,1]之间的 PILImage,我们将他们转换成归一化范围为[-1,1]之间的张量 Tensors。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值