TensorFlow-深度学习-01-常量,变量,操作数与占位符

关于Tensorflow的安装与具体教程可以参考官方中文网:Tensorflow中文社区
关于tensorflow的计算方式,如下图所示:
在这里插入图片描述
tensorflow计算的图形化表示如下图:
在这里插入图片描述
上图中右图的Tensor或Varible表示张量或变量,它们通过一个op(operation,操作)进行计算,得出的结果也是一个常量或变量,然后又与一组变量通过一个op进行计算,得到最终结果。右侧的图也是一样,比如W=2,X=3,op为乘法,所有得出结果为6,然后设b=4,与6通过op(加法)进行计算,得出结果为10,依次这样进行下去。但是,前提是这些操作必须在会话中进行,即在进行运算时,必须使用tf.Session()后方可输出答案,否则输出的是一个tensorflow的类型。

1、常量与变量

(1)常量
在tensorflow中创建常量使用constant()函数,如tf.constant(),这里做个测试:

import tensorflow as tf

hello=tf.constant("hello world!") # 创建常量
with tf.Session() as sess:    # 创建会话
    print(sess.run(hello))

运行结果:
在这里插入图片描述

(2)变量
创建变量有以下几种方法,主要使用Variable()函数创建:
在这里插入图片描述
现在通过代码一个一个试一下:
第一种:

    # 第一种初始化方法---等间距取值
    a=tf.Variable(tf.linspace(-5.,5.,10),dtype=tf.float32)  #这里的tf.linspace()表示取值范围为[-5,5],等间距取100个数,类型为float32位,其实默认的也是float32位。
    init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
        sess.run(init)  #在会话中先初始化运行
        print(sess.run(a))

运行结果:
在这里插入图片描述
第二种:

 # 第二种初始化方法---根据矩阵均值和方差进行矩阵定义(需使用随机函数)
    b=tf.Variable(tf.random_normal(shape=[3,3],mean=1.0,stddev=2.0,dtype=tf.float32),dtype=tf.float32) # 定义一个3*3的矩阵 
    init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
        sess.run(init)  #在会话中先初始化运行
        print("b:\n",sess.run( b))

运行结果:
在这里插入图片描述
第三种:
这里以复制b为例:

c=tf.Variable(b.initialized_value(),dtype=tf.float32)
init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
    print("c:\n", sess.run(c))

运行结果:
在这里插入图片描述
这里两个结果是一样的。

第四种:
使用tf.zeros()初始化一个全0矩阵。

# 第四种初始化方法---全零矩阵
    d = tf.Variable(tf.zeros([3,3],dtype=tf.float32), dtype=tf.float32)
    init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
        sess.run(init)  #在会话中先初始化运行
        print("d:\n", sess.run(d))

运行结果:
在这里插入图片描述
第五种:

# 第五种初始化方法---assign
    e=tf.assign(a,tf.linspace(-1.,1,10))

    init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
        sess.run(init)  #在会话中先初始化运行
        print("e:\n", sess.run(e))

运行结果:
在这里插入图片描述
注:tf.assign(A, new_number): 这个函数的功能主要是把A的值变为new_number,tf.assign()函数就有点把错题用橡皮擦擦除,然后重新写上新的答案一样。
类型转化
此外,我们还可以使用tf.cast()函数把数据类型进行转换。如下:

#类型转换
    e_cast=tf.cast(e,dtype=tf.int32) # 把e转化成int类型
    init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
        sess.run(init)  #在会话中先初始化运行
        print("e:\n", sess.run(e))
        print("e_cast:\n", sess.run(e_cast))

运行结果:
在这里插入图片描述

扫描二维码关注公众号,回复: 11016885 查看本文章

2、操作数

1、在本文一开始就介绍了op(操作),这里不再赘述。以两个常量相加为例进行代码解析:

a=tf.constant(2)  # 常量
    b=tf.constant(6)  # 常量
    c=tf.multiply(a,b)  # 乘法op
    with tf.Session() as sess:
        print("c:\n",sess.run(c))

运行结果:
在这里插入图片描述
2、在tensorflow中,常数还可以跟矩阵进行加减乘除的操作:

 a=tf.constant(2)  # 常量
    b=tf.constant(6)  # 常量
    c=tf.multiply(a,b)  # 乘法op
    m1=tf.constant([[1,2,3],
                    [4,5,6]])  # 矩阵常量
    m1_a=tf.add(m1,a) # 加法op,矩阵和常数在tf中可以进行加减乘除
    with tf.Session() as sess:
        print("c:\n",sess.run(c))
        print("m1_a:\n",sess.run(m1_a))

运行结果:
在这里插入图片描述
可以看到,矩阵中每个元素都被加上了2。

3、变量与常量的相加(矩阵)

 a=tf.constant(2)  # 常量
    b=tf.constant(6)  # 常量
    c=tf.multiply(a,b)  # 乘法op
    m1=tf.constant([[1,2,3],
                    [4,5,6]])  # 矩阵常量
    m1_a=tf.add(m1,a) # 加法op,矩阵和常数在tf中可以进行加减乘除
    d=tf.Variable(tf.random_normal([2,3],mean=1.0,stddev=2.0,dtype=tf.float32),dtype=tf.float32)# 变量矩阵

    m2_d=tf.add(d,tf.cast(m1_a,dtype=tf.float32))  #矩阵相加op
    init=tf.global_variables_initializer()  # 初始化
    with tf.Session() as sess:
        sess.run(init)  #运行初始化
        print("c:\n",sess.run(c))
        print("m1_a:\n",sess.run(m1_a))
        print("m2_d:\n", sess.run(m2_d))

运行结果:
在这里插入图片描述
当进行op的两个常量为矩阵时,使用tf.multiply()则是矩阵内的对应元素进行相乘,且2个矩阵之间的shape必须保持一致,如矩阵A为2X3,矩阵B也应该为2X3,所得的结果并不是线性代数中的那样。在tensorflow中,使用tf.matmul()这个函数进行相乘才是正统,除法类似。

3、占位符

placeholder,占位符,在tensorflow中类似于函数参数,运行时必须传入值。函数说明:tf.placeholder(dtype, shape=None, name=None)

    x=tf.placeholder(shape=[2,2],dtype=tf.float32)   #占位符
    y=tf.placeholder(shape=[2,1],dtype=tf.float32)
    xy=tf.matmul(x,y)   # 矩阵乘法op
    with tf.Session() as sess:  # 会话
        xy_result=sess.run(xy,feed_dict={x:[[1,2],[3,4]],y:[[5],[6]]})  # 规定数据
        print(xy_result)

运行结果:
在这里插入图片描述
占位符操作就好像一条数学公式,我们给这条数学公式输入相关参数,然后在Session()会话中运行这条输入了参数的公式,最终得到结果。

本文所有实例:

import tensorflow as tf
import numpy as np

'''-------------------常量--------------------------'''
def constant_demo():
    hello=tf.constant("hello world!") # 创建常量
    with tf.Session() as sess:    # 创建会话
        print(sess.run(hello))


constant_demo()
'''--------------------变量-------------------------'''
def Varible_demo():
    # 第一种初始化方法---等间距取值
    a=tf.Variable(tf.linspace(-5.,5.,10),dtype=tf.float32)  #这里的tf.linspace()表示取值范围为[-5,5],等间距取100个数,类型为float32位,其实默认的也是float32位。

    # 第二种初始化方法---根据矩阵均值和方差进行矩阵定义(需使用随机函数)
    b=tf.Variable(tf.random_normal(shape=[3,3],mean=1.0,stddev=2.0,dtype=tf.float32),dtype=tf.float32) # 定义一个3*3的矩阵

    # 第三种初始化方法---复制
    c=tf.Variable(b.initialized_value(),dtype=tf.float32)

    # 第四种初始化方法---全零矩阵
    d = tf.Variable(tf.zeros([3,3],dtype=tf.float32), dtype=tf.float32)

    # 第五种初始化方法---assign
    e=tf.assign(a,tf.linspace(-1.,1,10)) # tf.assign(A, new_number): 这个函数的功能主要是把A的值变为new_number

    #类型转换
    e_cast=tf.cast(e,dtype=tf.int32)
    init=tf.global_variables_initializer()  # 变量都需要初始化
    with tf.Session() as sess:
        sess.run(init)  #在会话中先初始化运行
        print("a:\n",sess.run(a))
        print("b:\n",sess.run( b))
        print("c:\n", sess.run(c))
        print("d:\n", sess.run(d))
        print("e:\n", sess.run(e))
        print("e_cast:\n", sess.run(e_cast))
Varible_demo()

'''--------------------操作数-------------------------'''
def op_demo():
    a=tf.constant(2)  # 常量
    b=tf.constant(6)  # 常量
    c=tf.multiply(a,b)  # 乘法op
    m1=tf.constant([[1,2,3],
                    [4,5,6]])  # 矩阵常量
    m1_a=tf.add(m1,a) # 加法op,矩阵和常数在tf中可以进行加减乘除
    d=tf.Variable(tf.random_normal([2,3],mean=1.0,stddev=2.0,dtype=tf.float32),dtype=tf.float32)# 变量矩阵



    m2_d=tf.add(d,tf.cast(m1_a,dtype=tf.float32))  #矩阵相加op
    init=tf.global_variables_initializer()  # 初始化
    with tf.Session() as sess:
        sess.run(init)  #运行初始化
        print("c:\n",sess.run(c))
        print("m1_a:\n",sess.run(m1_a))
        print("m2_d:\n", sess.run(m2_d))


op_demo()

'''------------------------占位符--------------------------'''
def placeholder_demo():
    x=tf.placeholder(shape=[2,2],dtype=tf.float32)   #占位符
    y=tf.placeholder(shape=[2,1],dtype=tf.float32)
    xy=tf.matmul(x,y)   # 矩阵乘法op
    with tf.Session() as sess:  # 会话
        xy_result=sess.run(xy,feed_dict={x:[[1,2],[3,4]],y:[[5],[6]]})  # 规定数据
        print("xy_result:\n",xy_result)

placeholder_demo()

所有运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了88 篇原创文章 · 获赞 39 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Daker_Huang/article/details/88345250