说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。
进入第二部分深度学习
第九章启动并运行Tensorflow
Tensorflow是一款用于数值计算的强大的开源软件库,特别适用于大规模机器学习的微调。
它的基本原理很简单:首先在 Python 中定义要执行的计算图(例如图 9-1),然后 TensorFlow 使用该图并使用优化的 C++ 代码高效运行该图。
- 提供了一个非常简单的 Python API,名为 TF.Learn2(tensorflow.con trib.learn),与 Scikit-Learn 兼容。正如你将会看到的,你可以用几行代码来训练不同类型的神经网络。之前是一个名为 Scikit Flow(或 Skow)的独立项目。
- 提供了另一个简单的称为 TF-slim(tensorflow.contrib.slim)的 API 来简化构建,训练和求出神经网络。
- 其他几个高级 API 已经在 TensorFlow 之上独立构建,如 Keras 或 Pretty Tensor。
- 它的主要 Python API 提供了更多的灵活性(以更高复杂度为代价)来创建各种计算,包括任何你能想到的神经网络结构。
- 它提供了几个高级优化节点来搜索最小化损失函数的参数。由于 TensorFlow 自动处理计算您定义的函数的梯度,因此这些非常易于使用。这称为自动分解(或autodi)。
- 它还附带一个名为 TensorBoard 的强大可视化工具,可让您浏览计算图表,查看学习曲线等。
- 这一章主要是介绍TensorFlow基础知识,从安装到创建,运行,保存和可视化简单的计算图
我发现之前看的tf相关教程还是太零散了,当时应该直接跳到这里……
1.安装
我的anaconda依旧不行,看来回去的时候要重做系统了。
常规的话使用pip install tensorflow语句即可完成安装。在GPU版本中需要安装英伟达对应的coda和相关包。这部分我打算放在colab上运行。
2.创建第一个图谱
生成一个计算图谱,tf会负责在处理器上运行并保留变量值
import tensorflow as tf x = tf.Variable(3, name='x') y = tf.Variable(4, name='y') f = x * x * y + y + 2
运行会话
#教程中做了两次优化 #1.使用sess.run(),但是有些麻烦 #2.使用with打开会话后,变量初始化并运行:x.initialzier.run(),依旧麻烦 #3.使用全局global_variables_initializer(),就不用手动处理每一个变量 init=tf.global_variables_initializer() with tf.Session() as sess: init.run() result=f.eval() print(result)
TensorFlow程序通常分为两部分:第一部分构建计算图谱(这称为构造阶段),第二部分运行它(这是执行阶段)。 建设阶段通常构建一个表示 ML 模型的计算图谱,然后对其进行训练,计算。 执行阶段通常运行循环,重复地求出训练步骤(例如,每个小批次),逐渐改进模型参数
3.管理图谱
在程序中创建的每一个节点都会添加至默认图形中。
4.Tensorflow实现线性回归
这里使用的是第二章的房地产数据,完成求theta数值的公式
import tensorflow as tf import numpy as np from sklearn.datasets import fetch_california_housing housing=fetch_california_housing() # print(housing) m,n=housing.data.shape housing_data_plus_bias=np.c_[np.ones((m,1)),housing.data] X=tf.constant(housing_data_plus_bias,dtype=tf.float32,name='X') y=tf.constant(housing.target.reshape(-1,1),dtype=tf.float32,name='y') #对X进行转置 XT=tf.transpose(X) #matmul矩阵相乘 theta=tf.matmul(tf.matmul(tf.matrix_inverse(tf.matmul(XT,X)),XT),y) with tf.Session() as sess: #eval用于获取返回值 theta_value=theta.eval() print(theta_value) # [[-3.7185181e+01] # [ 4.3633747e-01] # [ 9.3952334e-03] # [-1.0711310e-01] # [ 6.4479220e-01] # [-4.0338000e-06] # [-3.7813708e-03] # [-4.2348403e-01] # [-4.3721911e-01]]
教程中与sklearn的系那行回归模型结果进行了对比,结果是一致的
from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(housing.data, housing.target.reshape(-1, 1)) print(np.r_[lin_reg.intercept_.reshape(-1, 1), lin_reg.coef_.T])