输入import tensorflow as tf应该出现_深度学习之Tensorflow基础教程

本文是Tensorflow教程,涵盖了张量操作、计算图、占位符、变量、模型建立等内容。介绍了如何在计算图中使用张量名执行对象,以及如何储存和恢复模型。此外,还讲解了利用TensorBoard进行模型可视化的方法。
摘要由CSDN通过智能技术生成

78461eb3b616fb2e8ad6ce51cff47a36.png

上期分享,我给大家分享了pytorch的相关基础,不少小伙伴跟我吐苦水说能不能搞个Tensorflow的教程呀,Tensorflow的应用太乱了,那本期就是Tensorflow教程啦!!

本期的内容包括:

  1. Tensorflow的排序与张量
  2. Tensorflow 计算图
  3. Tensorflow中的占位符
  4. Tensorflow 的变量
  5. 建立回归模型
  6. 在Tensorflow计算图中用张量名执行对象
  7. 在Tensorflow中储存和恢复模型
  8. 把张量转换成多维数据阵列
  9. 利用控制流构图
  10. 用TensorBoard可视化图

1. Tensorflow的排序与张量

Tensorflow允许用户把张量操作和功能定义为计算图。张量是通用的数学符号,代表保存数据值的多维列阵,张量的维数称为

1c4ca5d9624fce61afc4c9df785faec0.png

引用相关的库

import tensorflow as tf
import numpy as np

获取张量的阶(从下面例子看到tf的计算过程)

# 获取张量的阶(从下面例子看到tf的计算过程)
g = tf.Graph()
# 定义一个计算图
with g.as_default():
    ## 定义张量t1,t2,t3
    t1 = tf.constant(np.pi)
    t2 = tf.constant([1,2,3,4])
    t3 = tf.constant([[1,2],[3,4]])
    
    ## 获取张量的阶
    r1 = tf.rank(t1)
    r2 = tf.rank(t2)
    r3 = tf.rank(t3)
    
    ## 获取他们的shapes
    s1 = t1.get_shape()
    s2 = t2.get_shape()
    s3 = t3.get_shape()
    print("shapes:",s1,s2,s3)
# 启动前面定义的图来进行下一步操作    
with tf.Session(graph=g) as sess:
    print("Ranks:",r1.eval(),r2.eval(),r3.eval())

3d2ae3347d8fcb57ad4c220ec310e732.png

2. Tensorflow 计算图

Tensorflow 的核心在于构建计算图,并用计算图推导从输入到输出的所有张量之间的关系。

假设有0阶张量a,b,c,要评估

,可以表示为下图所示的计算图:

614dba39b06ba3c91d8ce56ac11b0c38.png

可以看到,计算图就是一个节点网络,每个节点就像是一个操作,将函数应用到输入张量,然后返回0个或者更多个张量作为张量作为输出。

在Tensorflow编制计算图步骤如下:

  • 1.初始化一个空的计算图
  • 2.为该计算图加入节点(张量和操作)
  • 3.执行计算图:
  • a.开始一个新的会话
  • b.初始化图中的变量
  • c.运行会话中的计算图
# 初始化一个空的计算图
g = tf.Graph()

# 为该计算图加入节点(张量和操作)
with g.as_default():
    a = tf.constant(1,name="a")
    b = tf.constant(2,name="b")
    c = tf.constant(3,name="c")
    
    z = 2*(a-b)+c
    
# 执行计算图
## 通过调用tf.Session产生会话对象,该调用可以接受一个图为参数(这里是g),否则将启动默认的空图
## 执行张量操作的用sess.run(),他将返回大小均匀的列表
with tf.Session(graph=g) as sess:
    print('2*(a-b)+c =>',sess.run(z))

e6d0adc1323e53cdd054cf228f9b5061.png

3. Tensorflow中的占位符

Tensorflow有提供数据的特别机制。其中一种机制就是使用占位符,他们是一些预先定义好类型和形状的张量。

通过调用tf.placeholder函数把这些张量加入计算图中,而且他们不包括任何数据。然而一旦执行图中的特定节点就需要提供数据阵列。

(1)定义占位符

g = tf.Graph()

with g.as_default():
    tf_a = tf.placeholder(tf.int32,shape=(),name="tf_a")  # shape=[]就是定义0阶张量,更高阶张量可以用【n1,n2,n3】表示,如shape=(3,4,5)
    tf_b = tf.placeholder(tf.int32,shape=(),name="tf_b")   
    tf_c = tf.placeholder(tf.int32,shape=(),name="tf_c")
    
    r1 = tf_a - tf_b
    r2 = 2*r1
    z = r2 + tf_c

(2)为占位符提供数据

当在图中处理节点的时候,需要产生python字典来为占位符来提供数据阵列。

with tf.Session(graph=g) as sess:
    feed = {
        tf_a:1,
        tf_b:2,
        tf_c:3
    }
    
    print('z:',sess.run(z,feed_dict=feed))

421f064e867f5dbb6b2de3070af471e3.png

(3)用batch_sizes为数据阵列定义占位符

在研发神经网络模型的时候,有时会碰到大小规模不一致的小批量数据。占位符的一个功能是把大小无法确定的维度定义为None。

g = tf.Graph()

with g.as_default():
    tf_x = tf.placeholder(tf.float32,shape=(None,2),name="tf_x")
    x_mean = tf.reduce_mean(tf_x,axis=0,name="mean")
    
np.random.seed(123)
with tf.Session(graph=g) as sess:
    x1 = np.random.uniform(low=0,high=1,size=(5,2))
    print("Feeding data with shape",x1.shape)
    print("Result:",sess.run(x_mean,feed_dict={tf_x:x1}))
    
    x2 = np.random.uniform(low=0,high=1,size=(10,2))
    print("Feeding data with shape",x2.shape)
    print("Result:",sess.run(x_mean,feed_dict={tf_x:x2}))

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值