今天开始打算学习一下关于深度学习有关的知识,需要安装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()