TensorFlow学习
Tensorflow安装
总体来说还是要废好大周折的,捣鼓了两三天,可算是整完了,现在装大多装的是tensorflow2.0,官网提供的测试代码可能无法运行。起初不知,不知因为这个问题重装了多少遍,感觉电脑要被我整废了。。。。装的版本分为两个:cpu 、gpu。
cpu:这个比较好办,但根据教程,(为保险起见)需要先装(必须是专业版)VS 2015 或者 VS2017 ,之后在VS中装入C++工具包。成功之后,根据官网所说,打开cmd,先将pip upgrade到最新版本,之后 install tensorflow,就可以啦。
gpu:可能需要废些周章,需要另在自行安装cuda(前提是电脑拥有NVIDIA显卡并且支持gpu加速)、cuDNN(版本要与cuda匹配),并且配置好变量。详情见以下视频链接:
https://www.bilibili.com/video/av70734671/?spm_id_from=333.788.videocard.2
安装好之后,运行以下代码进行检测,如结果如下则GPU版本安装成功了:
import tensorflow as tf import os os.environ[\'TF_CPP_MIN_LOG_LEVEL\']=\'2\' a = tf.constant(1.) b = tf.constant(2.) print(a+b) print(\'GPU:\', tf.test.is_gpu_available()) #运行结果: \'\'\' tf.Tensor(3.0, shape=(), dtype=float32) GPU: True \'\'\'
Tensorflow基础
构造图:构造计算图
执行图:tensorflow运行图中tensor的过程。
在tensorflow中,图的构造和执行是分离的,因此tensorflow是一种静态图模式,一旦定义好了,它的执行便是固定的,不再变化的。
tensor:可以定义各种类型,可以有自己独特的名字。
构造图(Hello,world!)
import tensorflow as tf tf.compat.v1.disable_eager_execution() hello = tf.constant(\'hello,tensorflow\') sess= tf.compat.v1.Session() print(sess.run(hello))
#运行结果:
\'\'\'
b\'hello,tensorflow\'
\'\'\'
session :
作用:运行图中所有的tensor,并保存。
*在TensorFlow 2.0中,由于某一些库被移除,需要如下才能引用:
import tensorflow as tf sess = tf.Session() #开启Session语法 :运行图中所有的tensor,并且保存。 a = tf.constant(32) #构造图阶段
b = tf.constant(10) #构造图阶段
c = tf.add(a,b) #构造图阶段
print(sess.run(a)) #执行图阶段
print(sess.run(c)) #执行图阶段 print(sess.run([a,b])) #执行图阶段 print(sess.run([a,b,c])) #执行图阶段
#运行结果:
\'\'\'
32
[32,10]
[32,10,42]
\'\'\'
import tensorflow as tf sess = tf.Session() py_a = sess.run(a) print(type(py_a)) print(py_a) py_r = sess.run([a,b,c]) print(type(py_r)) print(py_r[0],py_r[1],py_r[2])
sess.close() #关闭Session
#运行结果:
\'\'\'
<type \'numpy.int32\'>
32
<type \'list\'>
(32,10,42)
Op:
作用:tensorflow具有很多基本操作,这些基本操作定义为Op。
#加法 a+b+b d = td.add_n([a,b,b]) #减法 a-b e = tf.subtract(a,b) #乘法 a*b f = tf.multiply(a,b) #除法 a/b g = tf.divide(a,b) #求余 a%b h = tf.mod(a,b) #数值类型转换 a_float = tf.cast(a,dtype = tf.float32) b_float = tf.cast(b,dtype = tf.float32) #sin(a) i = tf.sin(a_float) #exp(1/a) j = tf.exp(tf.divide(1.0,a_float)) #i +log(i) k = tf.add(i, tf.math.log(i))
mat:
作用:tensorflow的矩阵以及运算
mat_a = tf.constant([1,2,3,4]) #从4维向量生成(2,2)的矩阵 mat_a = tf.reshape(mat_a(2,2)) mat_b = tf.constant([1,3,5,7,9,11]) #生成(2,3)的矩阵 mat_b = tf.reshape(mat_b,(2,3)) #矩阵乘法 mat_c = tf.matmul(mat_a,mat_b)
random:
作用:tensorflow提供了多种随机化的方式
#标准正态分布随机 rand_normal = tf.random_normal((),mean = 0.0,stddev = 1.0,dtype = tf.float32,seed = None) #truncated 正态随机 truncated_normal = tf.truncated_normal((),mean = 0.0,stddev = 1.0,dtype = tf.float32,seed = None) #均匀分布随机 rand_uniform = tf.random_uniform((),minval = 0.0,maxval = 1.0,dtype = tf.float32,seed = NOne)
variable:
作用:tensorflow下可以修改值的tensor,它需要定义一个初始值,可以是数值,列表或者numpy矩阵,也可以直接是tensor。 像tensor一样,不能通过print获得具体的值。
初始化Variable:
#开启交互式“Session” sess - tf.InteractiveSession() #一次性初始化所有变量 init = tf.global_variables_initializer() #一般‘session’方法 sess.run(init) ##\'InteractiveSession\'的方法 init.run() #初始化某些变量 init_ab = tf.variables_initializer([var_a,var_b]) init_ab.run() #初始化某个变量 var_w.initializer.run()
eval of variable
W = tf.Variable(10) sess.run(W.initializer) print(W) print(sess.run(W)) print(W.eval())
#Out: \'\'\' <tf.Variable \'Variable_3:0\' shape=() dtype=int32_ref> 10 10 \'\'\'
variable赋值
作用:通过assign对variable进行赋值(这是一个操作,必须执行后才会产生效果)
W.assign(100) W.initializer.run() print(W.eval(sess)) #Out: \'\'\' 10 \'\'\' assign_op = W.assign(100) W.initializer.run() assign_op.eval() print(W.eval()) #Out: \'\'\' 100 \'\'\'
占位符
作用:图的节点可以没有具体的值,tensorflow根据这个逻辑定制了占位符(placeholder)的概念,它在构建图的时候占据图中一个位置,然后在执行图的时候才会代入具体的值。
#定义一个占位符 #\'tf.placeholder(dtype,shape=None,name=None)\' #定义一个\'float32\'型的占位符,它是一个长为3的向量 a = tf.placeholder(tf.float32,shape=[3]) #定义一个\'bool\'型的占位符,它是一个\'1X2\'的矩阵 b = tf.placeholder(tf.bool,shape=[1,2])