github上的一个比较有意思的tensorflow教程,一共四大块:热身、基础、基础机器学习、基础神经网络。打算翻译一下搬运过来。Tensorflow这部分坑比较多,尤其是安装。
安装分割线
目前(2018年12月)Tensorflow支持的好像只有3.6以下,GPU版本的需要安装CUDA和CUNN,这两个要在英伟达官网上搜索对应的版本号,我一直没有安装成功,现在只是使用CPU版本对付着用。
https://blog.csdn.net/ygjustgo/article/details/78883981
https://alanlee.fun/2016/12/01/installing-tensorflow/
https://blog.csdn.net/yuejisuo1948/article/details/81043962
这几个博客可以看一下。
安装完成后就进入学习了。
热身环节
目标:实现一个Hello World
原文中使用事件文档记录(event files)记录输出结果,但是我试了一下,输出的记录无法打开,会导致文件夹强行关闭,所以用处不大就注释掉了。
因为使用的是CPU进行处理,在运行的时候会报一个警告,所以在第二行增加了这句话。
2018-12-19 18:55:00.984369: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
这仅仅是一个开头,但是我们可以看到Tensorflow的主要结构。变量->会话->结束会话。
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
welcome=tf.constant('Welcome to Tensorflow world')
with tf.Session() as sess:
print('output: ',sess.run(welcome))
sess.close()
基础
基本数学操作
import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# tf.app.flags.DEFINE_string(
# 'log_dir', os.path.dirname(os.path.abspath(__file__)) + '/logs',
# 'Directory where event logs are written to.'
# )
#
# FLAGS = tf.app.flags.FLAGS
'''
tf的执行了一个特定的操作,输出的将是一个tensor(张量)
属性name定义能够更好地可视化
'''
a = tf.constant(5.0, name='a')
b = tf.constant(10.0, name='b')
x = tf.add(a, b, name='add')
y = tf.div(a, b, name='divide')
'''
session会话,是运行操作的环境,运行如下
'''
with tf.Session() as sess:
# writer = tf.summary.FileWriter(os.path.expanduser(FLAGS.log_dir), sess.graph)
print('output', sess.run([a, b, x, y]))
# writer.close()
sess.close()
对tensorflow变量的介绍,生成和初始化。定义变量很重要,因为变量控制参数。没有参数的话,训练、更新、保存、恢复以及其他操作都不能实现。在tensorflow中定义变量是仅仅是有确定大小和类型的张量(tensor)。张量必须使用数值初始化成为有效的。
import tensorflow as tf
from tensorflow.python.framework import ops
生成变量
对于变量的生成,使用tf.Variable()。当我们定义变量时,就是传入一个张量和它的数值进入到图(graph)中。
A变量张量有一个数值传入途中
通过使用tf.assign,一个初始化设置变量的初始数值
weights = tf.Variable(tf.random_normal([2, 3], stddev=0.1), name='weights')
biases = tf.Variable(tf.zeros([3]), name='biases')
custom_variable = tf.Variable(tf.zeros([3]), name="custom")
# 获取所有变量的张量并存储在一个list中
all_variables_list = ops.get_collection(ops.GraphKeys.GLOBAL_VARIABLES)
变量的初始化
必须在模型其他操作前运行初始化变量。这是自然的了,如果不进行变量初始化,其他操作无法进行。变量能够全局初始化、指定初始化或从其他变量中初始化。这里会对不同的操作进行比较,注意三种变量初始化时使用函数的不同。
# 初始化特殊变量,使用tf.variables_initializer(),可以命令tensorflow仅仅初始化一个特定的变量
# 需要注意的是custom initialization并不意味着不需要初始化其他变量。所有要使用到的变量都必须初始化或从已保存的便两种修改
all_variables_list = [weights, custom_variable]
init_custom_op = tf.variables_initializer(var_list=all_variables_list)
# 全局变量初始化,使用tf.global_variables_initializer(),所有变量能够一次性初始化,这一操作必须在模型建构完成后进行
# 两种初始化的方法
init_all_op = tf.global_variables_initializer()
init_all_op = tf.variables_initializer(var_list=all_variables_list)
# 使用其他已有变量进行初始化,使用initialized_value(),使用之前已经定义的变量数值初始化
WeightsNew = tf.Variable(weights.initialized_value(), name='WeightsNew')
init_WeightsNew_op = tf.variables_initializer(var_list=[WeightsNew])
运行会话Session
with tf.Session() as sess:
sess.run(init_all_op)
sess.run(init_custom_op)
sess.run(init_WeightsNew_op)![image.png](https://upload-images.jianshu.io/upload_images/14340919-a88c157b053f0925.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)