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])

  

原文地址:https://www.cnblogs.com/Dreamer-Jie/p/12547164.html