深度学习应用开发-TensorFlow 入门

今天开始打算学习一下关于深度学习有关的知识,需要安装python和下载配置tensorflow环境。因为原来对环境已经配置好了,在这里就不再赘述,不过确实挺麻烦的,我当时配置的时候花了很长的时间才配置好的,如果自己实在配置不好,就去找淘宝吧…

关于人工智能、深度学习、机器学习等概念,其实就是通过让机器通过人的思维方式进行学习,通过大量的已知数据对其进行训练,并不断的改变模型参数,最终得到最优的模型。

1、hello world程序

import tensorflow as tf

# 创建一个常量运算,将作为一个节点加入到默认计算图中
hello = tf.constant("Hello, World!")

# 创建一个TF对话
sess = tf.Session()

# 运行并获得结果
print(sess.run(hello))

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

2、tensorflow中节点信息

tensorflow其实就是张量流,每个节点中其实存储的就是一个向量,其中保存的是运算过程,是静态的。其中包括节点数值、数据类型和名称信息,想要得到其中的数值就必须先定义一个会话Session,然后利用这个会话来运行每一个张量。

直接打印节点的信息和节点里的值的信息

import tensorflow as tf
# 定义两个常量
node1 = tf.constant(3.0, tf.float32, name="node1")
node2 = tf.constant(4.0, tf.float32, name="node2")
# 相加操作
node3 = tf.add(node1, node2, name="node3")
# 定义会话
sess = tf.Session()
# 打印
print(sess.run(node3))
print(node3)

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

3、张量的属性

张量中存储的其实可以理解为多维数组,可以是一维的,二维的和多维的等等。其中属性包括数值、数据类型还有名称,其中**张量的形状(维度)**是一个重要的概念,即这个张量是几维的,每一维中的大小是多少。

如果想要得到某一个数值,可以直接通过下标来遍历。当以用会话对张量进行执行之后,其实得到的就是一个数组,可以直接使用Python中的数组下标方法来查找即可。具体见如下示例代码:

import tensorflow as tf
# 定义一个常量
tens1 = tf.constant([[[1, 2], [2, 3]], [[3, 4], [5, 6]]], name="tens1")
# 定义会话
sess = tf.Session()

print(tens1)
# 找到[1,1,1]的值
print(sess.run(tens1)[1, 1, 1])
# 关闭会话
sess.close()

运行结果:
在这里插入图片描述
前面定义的为静态的图,需要定义会话来得到值
几种会话的典型模式

4、会话的几种模式

定义会话有很多种方法,以下包括几种常用的方法。记住当使用完会话之后要及时将其关闭,避免占用太多的空间。

import tensorflow as tf

tens1 = tf.constant([[[1, 2], [2, 3]], [[3, 4], [5, 6]]], name="tens1")

# 创建一个会话
sess = tf.Session()

# 模式一:
try:
    print(sess.run(tens1))
except:
    print("Exception!")
finally:
    sess.close()
    

# 模式二:
# 创建一个会话,并通过Python上下文管理器来管理会话
# 不需要单独关闭会话
with tf.Session() as sess:
    print(sess.run(tens1))


# 模式三:
# 当指定一个默认会话之后可以通过tf.Tensor.eval函数来计算一个张量的取值
sess = tf.Session()
with sess.as_default():
    print(tens1.eval())


# 模式4:
# InteractiveSession()函数 将会话直接注册成默认会话
sess = tf.InteractiveSession()

print(tens1.eval())
sess.close()

5、常量与变量

常量和变量和其他语言中的定义类似,不过又有自己的特点。

(1)常量

常量就是不可以改变的量,tensorflow中使用constant来定义。

import tensorflow as tf
# 定义两个常量
node1 = tf.constant(3.0, tf.float32, name="node1")
node2 = tf.constant(4.0, tf.float32, name="node2")
# 加法操作
node3 = tf.add(node1, node2, name="node3")

sess = tf.Session()
print(sess.run(node3))
sess.close()

(2)变量

变量必须进行初始化 tf.global_variables_initializer(),并且需要执行。

import tensorflow as tf

node1 = tf.Variable(3.0, tf.float32, name="node1")
node2 = tf.Variable(4.0, tf.float32, name="node2")
node3 = tf.add(node1, node2, name="node3")

sess = tf.Session()

# 变量初始化(必须要执行)
init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(node3))

变量的值是可以改变的,不过一般情况下在深度学习当中,不需要人工进行改变,一般作为模型当中的参数出现,会根据模型的学习与训练自己进行调整。以下程序为打印1~10的操作。

import tensorflow as tf

value = tf.Variable(0, name="value")
one = tf.constant(1)
new_value = tf.add(value, one)
update_value = tf.assign(value, new_value)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for i in range(10):
        sess.run(update_value)
        print(sess.run(value))

6、占位符 placeholder

有些变量定义时并不知道数值,当运行程序时需要由外部进行输入。
相当于函数的参数或者C语言或者Python语言中格式化输出时的“%”占位符;
Feed提交数据 Fetch提取数据。

import tensorflow as tf

node1 = tf.placeholder(tf.float32, name="node1")
node2 = tf.placeholder(tf.float32, name="node2")
node3 = tf.multiply(node1, node2, name="node3")

with tf.Session() as sess:
    # 通过feed_dict的参数传值,按照字典格式
    result = sess.run(node3, feed_dict={node1: 8.0, node2: 3.5})
    print(result)

同时计算两个数,可以一次性执行并赋给两个数。

import tensorflow as tf

node1 = tf.placeholder(tf.float32, name="node1")
node2 = tf.placeholder(tf.float32, name="node2")
node3 = tf.multiply(node1, node2, name="node3")
node4 = tf.subtract(node1, node2, name="node4")

# init = tf.global_variables_initializer()

with tf.Session() as sess:
    # sess.run(init)
    # 通过feed_dict的参数传值,按照字典格式
    result1, result2 = sess.run([node3, node4], feed_dict={node1: 8.0, node2: 3.5})
    print("result1的值为:", result1, "  result2的值为:", result2)

7、tensorboard使用

代码如下,就是对我们的每个节点以及对应的操作进行可视化的一个工具,通过以下代码生成日志文件之后,需要通过终端执行相应代码来生成。

import tensorflow as tf

# 清除default graph和不断增加的节点
tf.reset_default_graph()

logdir = 'D:/log'

node1 = tf.placeholder(tf.float32, name="node1")
node2 = tf.placeholder(tf.float32, name="node2")
node3 = tf.multiply(node1, node2, name="node3")

# 生成一个写日志的writer,并将当前的TensorFlow计算图写入日志
writer = tf.summary.FileWriter(logdir, tf.get_default_graph())
writer.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MYH永恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值