ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

tensorflow第一天

2021-09-12 18:58:56  阅读:372  来源: 互联网

标签:None 第一天 张量 print tf tensorflow con


文章目录


tensorflow的安装

tensorflow有1.x和2.x,CPU和GPU版本的
这里我安装的是tensorflow1.15.0CPU版本
步骤:
1.创建一个虚拟环境
打开cmd终端,输入命令:

conda create -n pachong python==3.6.5

这条命令就创建了一个名字为pachong,基于python版本3.6.5的环境
2.查看anaconda环境下所有的虚拟环境

conda info --envs

3.安装tensorflow1.15.0
激活当前环境

activate pachong

在当前环境安装1.15.0版本的tensorflow

conda install -n pachong tensorflow==1.15.0

4.在pycharm中配置当前的虚拟环境
在这里插入图片描述

tensorflow结构分析

TensorFlow程序通常被组织成一个构建图阶段一个执行图阶段

在构建阶段,数据与操作的执行步骤被描述成一个图。

在执行阶段,使用会话执行构建好的图中的操作。

图和会话︰
-----------图:这是TensorFlow将计算表示为指令之间的依赖关系的一种表示法。
-----------会话: TensorFlow跨一个或多个本地或远程设备运行数据流图的机制
张量:TensorFlow中的基本数据对象
节点:提供图当中执行的操作

数据流图:
在这里插入图片描述
TensorFlow: Tensor - 张量 - 数据 Flow - 流动

TensorFlow是一个采用数据流图(data flow graphs),用于数值计算的开源框架。 节点(Operation)在图中表示数学操作,线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor) 。

tensorflow实现一个简单的加法运算:

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'


def tensorflow_demo():
    """
    TensorFlow的基本结构
    :return:
    """
    # 原生python加法运算
    a = 2
    b = 3
    c = a + b
    print("普通加法运算的结果:\n", c)

    # TensorFlow实现加法运算
    a_t = tf.constant(2)
    b_t = tf.constant(3)
    c_t = a_t + b_t
    print("TensorFlow加法运算的结果:\n", c_t)

    # 开启会话
    with tf.Session() as sess:
        c_t_value = sess.run(c_t)
        print("c_t_value:\n", c_t_value)

    return None

在这里插入图片描述

图与会话

什么是图结构
图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代赛的计算单元之间流动的数据。

图结构:数据(Tensor) + 操作(Operation)

图相关操作
1 默认图 通常TensorFlow会默认帮我们创建一张图。

查看默认图的两种方法:

通过调用tf.get_default_graph()访问,要将操作添加到默认图形中,直接创建OP即可。
op、sess都含有graph属性,默认都在一张图中
上面我们的代码有了一个加法运算,明明已经有了数据和对应的操作,但是图在哪里呢?

其实刚才的运算是使用的默认图

#tensorflow 实现加法运算
a=tf.constant(2)
b=tf.constant(3)#数据是3
c=a+b#操作是加法
print("tensorflow加法运法的结果:\n",c)

这个代码tensorflow会自动生成对应的默认图

查看默认图的两种方式:

#方法一:调用方法
default_g=tf.get_default_graph()
print("default_g:\n",default_g)
#方法二:查看属性
print("a的图属性:\n",a.graph)
print("c的图属性:\n", c.graph)
with tf.Session() as sess:
    c_value=sess.run(c)
    print("c_value:\n",c_value)
    print("sess的图属性:\n", sess.graph)

创建自定义的图 tf.Graph()

#创建自定义图
new_g=tf.Graph()

在自己的图中定义数据和操作,借用上下文管理器tf.Graph.as_default()

with new_g.as_default():
    a_new=tf.constant(20)
    b_new=tf.constant(30)
    c_new=a_new+b_new
    print("c_new=\n",c_new)

会话的两种开启方式
tf.Session:用于完整的程序当中
tf.InteractiveSession:用于交互式上下文中的

 __init__(target=", graph=None, config=None)
"""
初始化会话对象时的参数:
target:如果将此参数留空(默认设置),会话将仅使用
本地计算机中的设备。可以指定grpc://网址,蚁便指
定TensorFlow服务器的地址,这使得会话可以访问该
服务器控制的计算机上的所有设备。
graph:默认情况下,新的tf.Session将绑定到当前的
默认图。
config:此参数允许您指定一个tf.ConfigProto 以
便控制会话的行为。例如,ConfigProto协议用于打
印设备使用信息

"""
"""
2会话的run()
run(fetches,feed_dict=None, options=None, run_metadata=None)
-通过使用sess.run()来运行operation
-fetches:单一的operation,或者列表、元组(其它不
属于tensorflow的类型不行)
-feed_dict:参数允许调用者覆盖图中张量的值,运行时
赋值
-----------与tf.placeholder搭配使用,则会检查值
的形状是否与占位符兼容。
使用tf.operation.eval()也可运行operation,但需要在会话中运行
"""
#上下文管理器开启会话,它会自动回收资源,不用手动回收
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                      log_device_placement=True)) as sess:
    # 同时执行多个tensor
    print(sess.run([a, b, c]))#[2, 3, 5]
    a_t,b_t,c_t=sess.run([a, b, c])
    print("abc:\n",a_t,b_t,c_t)
    # abc:
    # 2 3 5

    # 也可以用eval 查看值
    print('用eval查看计算的值', a.eval())
    print('会话的属性:\n', sess.graph)
#定义占位符tf.placeholder()
a1 = tf.placeholder(tf.float32, shape=[])
b1= tf.placeholder(tf.float32, shape=[])
c1 = tf.constant([1,2,3])

with tf.Session() as sess:
    a2,b2,c2 = sess.run([a1,b1,c1],feed_dict={a: 1, b: 2,c:[4,5,6]})
    print(a2,b2,c2)
#传统会话定义,要关闭会话资源
sess=tf.Session()
sum_t=sess.run(c)
print("sum_t:\n",sum_t)
sess.close()#关闭会话资源

OP

1 常见op
在这里插入图片描述
接下来我们要区分一下操作函数和操作对象

在这里插入图片描述

#     操作函数:
#     tf.constant(Tensor对象)
#     f.add(Tensor对象1, Tensor对象2)
#    操作对象:(在调用操作函数时会生成一个操作对象)
#    输入Tensor对象-Const对象-输出Tensor对象
#    输入Tensor1、2对象 -Add对象-输出Tensor对象
#个人理解:
# 输入一个tensor对象来调用tf.constant()
# 操作函数,在调用操作函数的过程中会生成一个const操
# 作对象,这个操作对象的作用就是定义一个数,当操作对
# 象完成操作后就可以输出tensor对象,这个输出的tensor
# 对象是以返回值的形式输出的,即操作函数的返回值
#
#官方解释:
#    一个操作对象(Operation)是TensorFlow图中的
#    一个节点,可以接收0个或者多个输入Tensor,并
#    且可以输出o个或者多个Tensor,Operation对
#    象是通过op构造函数(如tf.matmul0)创建的。

#    例如: c = tf.matmul(a, b)创建了一个
#    Operation对象,类型为MatMul类型,它将张量
#    a, b作为输入,c作为输出,,并且输出数据,打
#    印的时候也是打印的数据。其中tf.matmul)是
#    函数,在执行matmul函数的过程中会通过MatMul
#    类创建一个与之对应的对象(就是MatMul操作对象)
#
import tensorflow as tf

con_a=tf.constant(3.0,name="con_a")
con_b=tf.constant(4.0,name="con_b")
sum_c=tf.add(con_a,con_b,name="sum_c")

print("打印con_a:\n",con_a)
print("打印con_b:\n",con_b)
print("打印sum_c:\n",sum_c)

import tensorflow as tf

con_a=tf.constant(3.0,name="con_a")
con_b=tf.constant(4.0,name="con_b")
sum_c=tf.add(con_a,con_b,name="sum_c")

print("打印con_a:\n",con_a)
print("打印con_b:\n",con_b)
print("打印sum_c:\n",sum_c)
# 打印con_a:
#  Tensor("con_a:0", shape=(), dtype=float32)
# 打印con_b:
#  Tensor("con_b:0", shape=(), dtype=float32)
# 打印sum_c:
#  Tensor("sum_c:0", shape=(), dtype=float32)
# 注意,打印出来的是张量值,可以理解成OP当中包含了
# 这个值。并且每一个OP指令都对应一个唯一的名称,如
# 上面的Const:0,这个在TensorBoard上面也可以显示
# 请注意,tf.Tensor对象以输出该张量的tf.Operation
# 明确命名。张量名称的形式为“<OP_NAME>:<i>",其中:
# "<OP_NAME>”是生成该张量的指令的名称
# "<i>”是一个整数,它表示该张量在指令的输出中的索引

指令名称

# 2.指令名称
#     一张图有一个命名空间
#     每个创建的新的tf.Operation或返回新的
#     tf.Tensor的API函数可以接受可选的name
#     参数,就是说指令名称是可以更改的
# 例如,tf.constant(42.0,name="answer")创建了一个
# 名为"answer”的新tf.Operation并返回一个名为"
# "answer:0”的tf.Tensor。如果默认图已包含名为"
# "answer”的指令,则TensorFlow 会在名称上附加
# "1"、“2”等字符,以便让名称具有唯一性。

张量

# TensorFlow用张量这种数据结构来表示所有的数据.
# 你可以把一个张量想象成一个n维的数组或列表.一个张
# 量有一个静态类型和动态类型的维数.张量可以在图中的
# 节点之间流通.其实张量更代表的就是一种多位数组。

#         张量 在计算机当中如何存储?
#         标量 一个数字                 0阶张量
#         向量 一维数组 [2, 3, 4]       1阶张量
#         矩阵 二维数组 [[2, 3, 4],     2阶张量
#                     [2, 3, 4]]
#         ……
#         张量 n维数组                  n阶张量
#         1 张量的类型
#         2 张量的阶
#         创建张量的时候,如果不指定类型
#         默认 tf.float32
#         整型 tf.int32
#         浮点型 tf.float32

1 张量的类型

在这里插入图片描述
2 张量的阶
在这里插入图片描述

import tensorflow as tf
#张量演示
tensor1 = tf.constant(4.0)
tensor2 = tf.constant([1, 2, 3, 4])
linear_squares = tf.constant([[4], [9], [16], [25]], dtype=tf.int32)

print("tensor1:\n", tensor1)
print("tensor2:\n", tensor2)
print("linear_squares_before:\n", linear_squares)

with tf.Session() as sess:
    print("tensor1:\n", type(tensor1.eval()))#<class 'numpy.float32'>
    print("tensor2:\n", tensor2.eval())
    print("linear_squares_before:\n", linear_squares.eval())

在这里插入图片描述
在这里插入图片描述
创建张量的指令
1 . 固定值张量

tf.zeros(shape, dtype=tf.float32, name=None) 创建所有元素设置为零的张量。此操作返回一个dtype具有形状shape和所有元素设置为零的类型的张量。

tf.zeros_like(tensor, dtype=None, name=None) 给tensor定单张量(),此操作返回tensor与所有元素设置为零相同的类型和形状的张量。

tf.ones(shape, dtype=tf.float32, name=None) 创建一个所有元素设置为1的张量。此操作返回一个类型的张量,dtype形状shape和所有元素设置为1。

tf.ones_like(tensor, dtype=None, name=None) 给tensor定单张量(),此操作返回tensor与所有元素设置为1相同的类型和形状的张量。

tf.fill(dims, value, name=None) 创建一个填充了标量值的张量。此操作创建一个张量的形状dims并填充它value。

tf.constant(value, dtype=None, shape=None, name='Const') 创建一个常数张量。

2 . 随机值张量

一般我们经常使用的随机数函数Math.random() 产生的是服从均匀分布的随机数,能够模拟等概率出现的况,例如扔一个骰子,1到6点的概率应该相等,但现实生活中更多的随机现象是符合正态分布的,例如20岁成年人的体重分布等。

假如我们在制作一个游戏,要随机设定许许多多NPC的身高,如果还用Math.random(),生成从140到22之间的数字,就会发现每个身高段的人数是一样多的,这是比较无趣的,这样的世界也与我们习惯不同,玛实应该是特别高和特别矮的都很少,处于中间的人数最多,这就要求随机函数符合正态分布。

tf.truncated_normal[shape, mean=0.0, stddev=1.0, ctype=tf.float32, seed=None, name=None) 从截断的正态分布中输出随机值,和 tf.random_normal)一样,但是所有数字都不超过两个标准差

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32,seed=None, name=None) 从正态分布中输出随机值,由随机正态分布的数字组成的矩阵

标签:None,第一天,张量,print,tf,tensorflow,con
来源: https://blog.csdn.net/weixin_52443264/article/details/120253705

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有