二、tensorflow入门

二、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 ]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值