python之深度学习(tensorflow)图,会话

2021-04-02 13:25

阅读:345

标签:fetch   数学   hold   运算   ati   元素   不能   网络   报错   

import tensorflow as tf
import os
os.environ[TF_CPP_MIN_LOG_LEVEL] = 2#把报错的这个警告等级降低
#图:默认已经注册,一组表示tf.Operation(节点)计算单元的对象和tf.Tensor(张量)操作之间的数据单元的对象,所以一张图包含两个:
#一个是OP一个是Tensor
#获取一个图的方法有:tf.get_default_graph()
a = tf.constant(8.0)
b = tf.constant(5.0)
sum1 = tf.add(a,b)
gra = tf.get_default_graph() #
                             #说白了其实还是给你一个地址,你以后的操作的程序就在这个内存块内进行
print(gra)
with tf.Session() as sess:
    print(sess.run(sum1)) #打印13
    #接下来我们看看每个Operation的图也就是地址是不是在一起的,答案是一样的,都在这个地址上0x000001F7992AA438>
    print(a.graph)
    print(sum1.graph)
    print(sess.graph)

#哪些是Operation呢:标量运算(加减乘除等数学运算);向量运算;矩阵运算;带状态的运算;神经网络的组件;控制流等等
#只要是使用tensorflow的API定义的函数都是OP,例如上边的a,b,sum1,gra等等
#什么是Tensor呢:就是指的是数据,例如上边的a = tf.constant(8.0)中的8.0就是Tensor类型的
#所以可以抽象的理解成:OP是一个载具,Tensor是一个被载的数据
import tensorflow as tf
import os
os.environ[TF_CPP_MIN_LOG_LEVEL] = 2#把报错的这个警告等级降低
#placeholder是一个占位符,feed_dict是一个字典
plt = tf.placeholder(tf.float32,[None,3])#一个未知维列表,未知的行但是有3列张量类型是tf.float32
with tf.Session() as sess:
    print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))

#哪些是Operation呢:标量运算(加减乘除等数学运算);向量运算;矩阵运算;带状态的运算;神经网络的组件;控制流等等
#只要是使用tensorflow的API定义的函数都是OP,例如上边的a,b,sum1,gra等等
#什么是Tensor呢:就是指的是数据,例如上边的a = tf.constant(8.0)中的8.0就是Tensor类型的
#所以可以抽象的理解成:OP是一个载具,Tensor是一个被载的数据
#run()方法:run(fetches,feed_dict=None,graph=None):是运行OP和Tensor
#参数:fetches是嵌套的列表,元组
#参数:feed_dict允许调用者覆盖图中指定的张量的值,提供给placeholder使用

张量的动态形状和静态形状:

张量的静态形状:创建一个张量初始状态的形状,方法有:tf.get_shape():获取静态的形状,tf.set_shape() :更新Tensor对象的静态形状

张量的动态形状:描述原始张量在执行过程中的一种形态,tf.reshape():创建一个不同动态的新张量

import tensorflow as tf
import os
os.environ[TF_CPP_MIN_LOG_LEVEL] = 2#把报错的这个警告等级降低

plt = tf.placeholder(tf.float32,[None,3])
shape1 = plt.get_shape()
print(shape1)  #(?, 3)
plt.set_shape([4,3])
print(plt.get_shape()) #(4, 3)
#再次设置形状,他会报错,对于静态形状来说只能设置一次形状
plt.set_shape([5,3])
print(plt.get_shape()) #(4, 3)


with tf.Session() as sess:
    pass

接下来试验一下张量的动态性状:需要特别注意的是:动态完后的元素个数和分配前是一样 的,4 * 3 = 3 * 4

import tensorflow as tf
import os
os.environ[TF_CPP_MIN_LOG_LEVEL] = 2#把报错的这个警告等级降低

plt = tf.placeholder(tf.float32,[None,3])
shape1 = plt.get_shape()
print(shape1)  #(?, 3)
plt.set_shape([4,3])
print(plt.get_shape()) #(4, 3)
#再次设置形状,他会报错,对于静态形状来说只能设置一次形状
# plt.set_shape([5,3])
# print(plt.get_shape()) #(4, 3)
#接下来就是动态形状了
plt_reshape = tf.reshape(plt,[3,4])
print(plt_reshape.get_shape()) #(3, 4)

with tf.Session() as sess:
    pass

总结一下:

1.转化静态形状的时候一维只能到一维,二维只能到二维,三维只能到三维

2.对于已经固定的静态形状的张量或者变量,不能再次设置他的静态形状

3.tf.reshape(张量对象,[新设置的维度]),元素的个数不能不匹配

 

python之深度学习(tensorflow)图,会话

标签:fetch   数学   hold   运算   ati   元素   不能   网络   报错   

原文地址:https://www.cnblogs.com/boost/p/13490065.html


评论


亲,登录后才可以留言!