说明:本文依据《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相关教程还是太零散了,当时应该直接跳到这里……
7.模型保存和读取
完成模型训练后应该把参数保存到磁盘,所以你可以随时随地回到它,在另一个程序中使用它,与其他模型比较。
此外,您可能希望在训练期间定期保存检查点,以便如果您的计算机在训练过程中崩溃,您可以从上次检查点继续进行,而不是从头开始。
TensorFlow 可以轻松保存和恢复模型。 只需在构造阶段结束(创建所有变量节点之后)创建一个保存节点; 那么在执行阶段,只要你想保存模型,只要调用它的save()方法“save_path = saver.save(sess, "需要保存的地址")”。
恢复模型,在构建阶段结束时创建一个保存器,就像之前一样,但是在执行阶段的开始,而不是使用init节点初始化变量,可以调用restore()方法 的保存器对象。
housing = fetch_california_housing()m, n = housing.data.shapeprint("数据集:{}行,{}列".format(m, n))# 使用np.c_按照colunm来组合array,其实就是生成m个元素为1的list,然后和housing.data数据合并,在每个housing.data数组前加1housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]# 对数据进行归一化处理,这部分有了调整scaler = StandardScaler()scaled_housing_data = scaler.fit_transform(housing.data)scaled_housing_data_plus_bias = np.c_[np.ones((m, 1)), scaled_housing_data]# 迭代次数和学习频率n_epochs = 1000learning_rate = 0.01# 原始的X,y初始化# X = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name="X")# y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name="y")# 使用占位符X = tf.placeholder(tf.float32, shape=(None, n + 1), name="X")y = tf.placeholder(tf.float32, shape=(None, 1), name="y")# random_uniform()函数在图形中创建一个节点,它将生成包含随机值的张量,给定其形状和值作用域,就像 NumPy 的rand()函数一样。theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0), name="theta")y_pred = tf.matmul(X, theta, name="predictions")error = y_pred - ymse = tf.reduce_mean(tf.square(error), name="mse")# 原始手动下降# gradients = 2 / m * tf.matmul(tf.transpose(X), error)# assign()函数创建一个为变量分配新值的节点。 在这种情况下,它实现了批次梯度下降步骤# training_op = tf.assign(theta, theta - learning_rate * gradients)# 使用优化器optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)training_op = optimizer.minimize(mse)init = tf.global_variables_initializer()# 这里初始化一个saversaver = tf.train.Saver()n_epochs = 10batch_size = 100n_batches = int(np.ceil(m / batch_size))def fetch_batch(epoch, batch_index, batch_size): know = np.random.seed(epoch * n_batches + batch_index) # not shown in the book # print("我是know:
















