TensorFlow是google 开源的机器学习工具,在2015年11月其实现正式开源,开源协议Apache 2.0,被广泛应用于各类machine learning算法的编程实现,其前身是Google的神经网络算法库DistBelief 。
Tensorflow 拥有易用的 python 接口,而且可以部署在一台或多台 cpu , gpu 上,兼容多个平台,包括但不限于 安卓/windows/linux 等等平台上,而且拥有 tensorboard这种可视化工具,可以使用 checkpoint 进行实验管理,得益于图计算,它可以进行自动微分计算,拥有庞大的社区,而且很多优秀的项目已经使用 tensorflow 进行开发了。
第一次学习,这里是简要笔记,部分内容参考网络。
1.1 准备工作
采用Anaconda3,因为Anaconda3集成了Python和各种用到的库,但最新版本的Anaconda3集成了最新的Python3.6版,它对TensorFlow支持并不友好(会报错),比较稳定的版本是Python3.5。
操作系统:
Windows 10家庭版
软件版本:
Anaconda3-4.3.0-Windows-x86_64.exe(直接去官网下载)
python-3.5.2-amd64.exe(我是单独下载并安装的)
1.2 开始安装
第一步:安装python3.5.2(这个没什么特别的)
第二步:安装Anaconda3
执行Anaconda3-4.3.0-Windows-x86_64.exe
安装完成后:
备注:笔记记录是安装完后写的,有些组件是后续步骤安装生成的。
第三步:打开Anaconda Prompt,输入清华仓库镜像,更新会快一些(使用标准的也可以跳过):
(tensorflow) C:Users45014>conda config --add
channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
(tensorflow) C:Users45014>conda config --set show_channel_urls yes
第四步:在Anaconda Prompt中利用Anaconda创建一个python3.5的环境
环境名称为tensorflow ,输入命令:
(tensorflow) C:Users45014>conda create -n tensorflow python=3.5
打开Anaconda Navigator,点击左侧的Environments,可以看到tensorflow的环境已经创建好
备注:右侧已经安装的包是后来手工安装的,不是默认已安装的。
第五步:在Anaconda Prompt中启动tensorflow环境:
(tensorflow) C:Users45014>activate tensorflow
第六步:基于pip安装CPU版本的TensorFlow(GPU的没有学习)
安装cpu版本的Tensorflow:
(tensorflow) C:Users45014>pip install --upgrade --ignore-installed tensorflow
这个需要一点时间,安装完成这样tensorflow cpu版本就安装好了。
注意:这里可能错误,我的原因是pip版本太低,需要升级,升级pip命令:
python -m pip install --upgrade pip
1.3 命令行基本测试
命令行测试代码如下:
(tensorflow) C:Users45014>python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>>
>>>
1.4 图形界面基本测试
为了能在Spyder中使用tensorflow,我们需要在tensorflow的环境中安装这个的插件。
打开Anaconda Navigator,选择Not installed,找到Spyder并安装,安装完成后显示如下:
打开Spyder,创建一个新的文件,然后输入:
# -*- coding: utf-8 -*- """ Created on Sat Mar 23 19:57:07 2019 @author: 45014 """ import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello))
输出:
runfile('D:/AI/test.py', wdir='D:/AI')
b'Hello, TensorFlow!'
1.5 线性回归测试测试
如下代码来自网络,供初始学习:
说明:Numpy:是Python的科学计算库,提供矩阵运算。
matplotlib: 绘图系统
TensorFlow两个重要概念:Tensor和Flow,Tensor就是张量(可以理解为多维数组),Flow就是计算相互转化的过程。TensorFlow的计算方式类似Spark的有向无环图(DAG),在创建Session之后才开始计算(类似Action算子)
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import tensorflow as tf import numpy import matplotlib.pyplot as plt rng = numpy.random # Parameters learning_rate = 0.01 training_epochs = 2000 display_step = 50 # Training Data train_X = numpy.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1]) train_Y = numpy.asarray([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,2.827,3.465,1.65,2.904,2.42,2.94,1.3]) n_samples = train_X.shape[0] # tf Graph Input X = tf.placeholder("float") Y = tf.placeholder("float") # Create Model # Set model weights W = tf.Variable(rng.randn(), name="weight") b = tf.Variable(rng.randn(), name="bias") # Construct a linear model activation = tf.add(tf.multiply(X, W), b) # Minimize the squared errors cost = tf.reduce_sum(tf.pow(activation-Y, 2))/(2*n_samples) #L2 loss optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent # Initializing the variables init = tf.initialize_all_variables() # Launch the graph with tf.Session() as sess: sess.run(init) # Fit all training data for epoch in range(training_epochs): for (x, y) in zip(train_X, train_Y): sess.run(optimizer, feed_dict={X: x, Y: y}) #Display logs per epoch step if epoch % display_step == 0: print ("Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(sess.run(cost, feed_dict={X: train_X, Y:train_Y})), "W=", sess.run(W), "b=", sess.run(b)) print ("Optimization Finished!") print ( "cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b)) #Graphic display plt.plot(train_X, train_Y, 'ro', label='Original data') plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line') plt.legend() plt.show()
输出结果:
Epoch: 0001 cost= 1.820976377 W= 0.633242 b= 0.0618359
Epoch: 0051 cost= 0.110087097 W= 0.351423 b= 0.0689108
Epoch: 0101 cost= 0.106258854 W= 0.345367 b= 0.112479
Epoch: 0151 cost= 0.102872960 W= 0.339671 b= 0.153457
Epoch: 0201 cost= 0.099878326 W= 0.334314 b= 0.191997
Epoch: 0251 cost= 0.097229756 W= 0.329275 b= 0.228245
Epoch: 0301 cost= 0.094887264 W= 0.324536 b= 0.262337
Epoch: 0351 cost= 0.092815511 W= 0.320079 b= 0.294402
Epoch: 0401 cost= 0.090983227 W= 0.315887 b= 0.32456
Epoch: 0451 cost= 0.089362837 W= 0.311944 b= 0.352924
Epoch: 0501 cost= 0.087929703 W= 0.308235 b= 0.379601
Epoch: 0551 cost= 0.086662307 W= 0.304748 b= 0.404692
Epoch: 0601 cost= 0.085541502 W= 0.301467 b= 0.428289
Epoch: 0651 cost= 0.084550321 W= 0.298382 b= 0.450484
Epoch: 0701 cost= 0.083673775 W= 0.295481 b= 0.471359
Epoch: 0751 cost= 0.082898602 W= 0.292751 b= 0.490993
Epoch: 0801 cost= 0.082213178 W= 0.290185 b= 0.509457
Epoch: 0851 cost= 0.081607066 W= 0.28777 b= 0.526825
Epoch: 0901 cost= 0.081071086 W= 0.2855 b= 0.54316
Epoch: 0951 cost= 0.080597132 W= 0.283364 b= 0.558523
Epoch: 1001 cost= 0.080178089 W= 0.281356 b= 0.572972
Epoch: 1051 cost= 0.079807580 W= 0.279466 b= 0.586563
Epoch: 1101 cost= 0.079479963 W= 0.27769 b= 0.599345
Epoch: 1151 cost= 0.079190284 W= 0.276019 b= 0.611367
Epoch: 1201 cost= 0.078934260 W= 0.274447 b= 0.622673
Epoch: 1251 cost= 0.078707911 W= 0.272969 b= 0.633305
Epoch: 1301 cost= 0.078507796 W= 0.271579 b= 0.643306
Epoch: 1351 cost= 0.078330889 W= 0.270271 b= 0.652711
Epoch: 1401 cost= 0.078174531 W= 0.269042 b= 0.661557
Epoch: 1451 cost= 0.078036278 W= 0.267885 b= 0.669878
Epoch: 1501 cost= 0.077914089 W= 0.266797 b= 0.677704
Epoch: 1551 cost= 0.077806085 W= 0.265774 b= 0.685065
Epoch: 1601 cost= 0.077710636 W= 0.264812 b= 0.691988
Epoch: 1651 cost= 0.077626288 W= 0.263907 b= 0.6985
Epoch: 1701 cost= 0.077551730 W= 0.263055 b= 0.704624
Epoch: 1751 cost= 0.077485852 W= 0.262255 b= 0.710384
Epoch: 1801 cost= 0.077427655 W= 0.261502 b= 0.715801
Epoch: 1851 cost= 0.077376239 W= 0.260793 b= 0.720897
Epoch: 1901 cost= 0.077330798 W= 0.260127 b= 0.725689
Epoch: 1951 cost= 0.077290662 W= 0.259501 b= 0.730196
Optimization Finished!
cost= 0.0772559 W= 0.258923 b= 0.734354