二、tensorflow入门
第一节:tensorflow常量变量定义
学习方法:类比成c++,java
把tensorflow当做一种开发语言来学习
基础数据类型、运算符、流程、字典、数组
tensorflow所有的操作都要Session会话来操作,还需要close
- 所有的**变量[tf.Variable(10,name=‘var’)]**在session之前都要初始化tf.global_variables_initializer(),sess.run(init)后数据才起作用
- 由于v2不支持v1的语法前面加上两句
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
#opencv tensorflow
#类比 语法 api 原理
#基础数据类型 运算符 流程 字典 数组
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
data1 = tf.constant(2,dtype=tf.int32)
data2 = tf.Variable(10,name='var')
print(data1)
print(data2)
'''
sess = tf.Session()
print(sess.run(data1))
init = tf.global_variables_initializer()
sess.run(init) # 必须要把初始化放到sess里面run
print(sess.run(data2))
sess.close()
# 本质 tf = tensor + 计算图
# tensor 数据
# op
# graphs 数据操作
# session
'''
init = tf.global_variables_initializer()
sess = tf.Session()
with sess:
sess.run(init)
print(sess.run(data2))
- 由于seesion用完需要关闭体用两种写法:
import tensorflow.compat.v1 as tf
import numpy as np
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
tf.disable_v2_behavior()
m1 = tf.constant([[3, 3]]) # 一行两列
m2 = tf.constant([[2],
[2]]) # 两行一列
product = tf.matmul(m1, m2) # 矩阵相乘 和numpy的dot(m1, m2)一样
# method 1:
sess = tf.Session()
result = sess.run(product)
print(result)
sess.close()
# method 2: with会自动运行结束后把sess关闭
with tf.Session() as sess:
result2 = sess.run(product)
print(result2)
第二节:tensorflow运算原理
- tensorflow运算实质:
tensorflow的本质是:tensor + graphs(计算图) 来实现的
tensor本质上是数据:可以是常量、变量、一维、二维
operation可以赋值、四则运算
graphs(计算图):数据操作
tensorflow中所有的会话都要放到Session中执行
所以Session才是核心:可以理解成运算的交互环境
第三节:常量变量四则运算
1)使用常量:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
data1 = tf.constant(6)
data2 = tf.constant(2)
dataAdd = tf.add(data1,data2) # +
dataMul = tf.multiply(data1,data2) # x
dataSub = tf.subtract(data1,data2) # -
dataDiv = tf.divide(data1,data2) # /
with tf.Session() as sess:
print(sess.run(dataAdd))
print(sess.run(dataMul))
print(sess.run(dataSub))
print(sess.run(dataDiv))
print('end!')
2)使用变量:(需要初始化)
tf.assign:赋值操作->把右边的赋值给左边的 data2 = dataAdd
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
data1 = tf.constant(6)
data2 = tf.Variable(2)
dataAdd = tf.add(data1,data2)
dataCopy = tf.assign(data2,dataAdd)# dataAdd ->data2
dataMul = tf.multiply(data1,data2)
dataSub = tf.subtract(data1,data2)
dataDiv = tf.divide(data1,data2)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print(sess.run(dataAdd))
print(sess.run(dataMul))
print(sess.run(dataSub))
print(sess.run(dataDiv))
print('sess.run(dataCopy)',sess.run(dataCopy))#8->data2
print('dataCopy.eval()',dataCopy.eval())#8+6->14->data = 14
print('tf.get_default_session()',tf.get_default_session().run(dataCopy))
print('end!')
输出结果:
8
12
4
3.0
sess.run(dataCopy) 8
dataCopy.eval() 14
tf.get_default_session() 20
end!
- dataCopy.eval()这句没有用到session
它其实和它下面那句话意思一样tf.get_default_session().run(dataCopy)
data2在上面那句话已经变成8,再运行一次相同默认操作先dataAdd
dataAdd=6+8=14再把14赋值给dataCopy。
第四节:矩阵基础
1)placehold
#placehold
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
data1 = tf.placeholder(tf.float32)
data2 = tf.placeholder(tf.float32)
dataAdd = tf.add(data1,data2)
with tf.Session() as sess:
print(sess.run(dataAdd,feed_dict={data1:6,data2:2}))
# 1 dataAdd 2 data (feed_dict = {1:6,2:2})
print('end!')
feed_dict类似于键值对的输入
也可以对数组的输入:
input1 = tf.placeholder(tf.float32,[2,2])
input2 = tf.placeholder(tf.float32,[2,2])
with tf.Session() as sess:
print(sess.run(output,feed_dict={input1:[[2,3],[4,5]],input2:[[2,3],[4,5]]}))
print(sess.run(output1,feed_dict={input1:[[2,3],[4,5]],input2:[[2,3],[4,5]]}))
2)矩阵定义
#类比 数组 M行N列 [] 内部[] [里面 列数据] [] 中括号整体 行数
#[[6,6]] [[6,6]]
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
data1 = tf.constant([[6,6]])
data2 = tf.constant([[2],
[2]])
data3 = tf.constant([[3,3]])
data4 = tf.constant([[1,2],
[3,4],
[5,6]])
print(data4.shape)# 维度
print('-------')
with tf.Session() as sess:
print(sess.run(data4)) #打印整体
print('-------')
print(sess.run(data4[0]))# 打印某一行
print('-------')
print(sess.run(data4[:,0]))#MN 列 :表示列的每一行
print('-------')
print(sess.run(data4[0,1]))#第一行第二列 1 1 MN = 0 3行2列 = M的范围0、1、2 N的范围0、1
0,1 :中0是第一行,1是第二列
输出结果:
(3, 2)
-------
[[1 2]
[3 4]
[5 6]]
-------
[1 2]
-------
[1 3 5]
-------
2
3)矩阵运算
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
data1 = tf.constant([[6,6]])
data2 = tf.constant([[2],
[2]])
data3 = tf.constant([[3,3]])
data4 = tf.constant([[1,2],
[3,4],
[5,6]])
matMul = tf.matmul(data1,data2) # 和 numpy的dot一样
matMul2 = tf.multiply(data1,data2)
matAdd = tf.add(data1,data3)
with tf.Session() as sess:
print(sess.run(matMul))#1 维 M=1 N2. 1X2(MK) 2X1(KN) = 1
print(sess.run(matAdd))#1行2列
print(sess.run(matMul2))# 1x2 2x1 = 2x2
print(sess.run([matMul,matAdd])) # 可以打印多个数据
- multiply的乘法类似于加法点对点的操作,如 [ 2, 3 ] , [4 , 5 ] multiply [ 2, 3 ] , [4 , 5 ]
等于 [ 4 , 9] ,[ 16, 25]
- matmul就是标准的矩阵乘法了。
输出结果:
[[24]]
[[9 9]]
[[12 12]
[12 12]]
[array([[24]]), array([[9, 9]])]
4)矩阵任意定义
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
mat0 = tf.constant([[0,0,0],[0,0,0]]) # 2*3矩阵
mat1 = tf.zeros([2,3]) # 填充0
mat2 = tf.ones([3,2]) # 填充1
mat3 = tf.fill([2,3],15) # 全部填充15
with tf.Session() as sess:
#print(sess.run(mat0))
#print(sess.run(mat1))
#print(sess.run(mat2))
print(sess.run(mat3))
[[15 15 15]
[15 15 15]]
- tf.zeros_like(mat1) zeros全0,like与mat1相同的维度
- tf.linspace(0.0,2.0,11) 0 - 2之前分成10等分
- tf.random_uniform([2,3],-1,2) 产生2*3维度的矩阵,范围在-1 - 2之间
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
mat1 = tf.constant([[2],[3],[4]]) # 3行一列
mat2 = tf.zeros_like(mat1)
mat3 = tf.linspace(0.0,2.0,11)
mat4 = tf.random_uniform([2,3],-1,2)
with tf.Session() as sess:
print('---------------')
print(sess.run(mat2))
print('---------------')
print(sess.run(mat3))
print('---------------')
print(sess.run(mat4))
输出结果:
---------------
[[0]
[0]
[0]]
---------------
[0. 0.2 0.4 0.6 0.8 1. 1.2
1.4 1.6 1.8000001 2. ]
---------------
[[ 1.0292606 -0.46539104 0.18062723]
[ 1.9137352 1.5759377 -0.5809592 ]]