前期准备

  • 加载必要的库
from __future__ import print_functionimport mathfrom IPython import display
from matplotlib import cm
from matplotlib import gridspec
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
from sklearn import metrics
import tensorflow as tf
from tensorflow.python.data import Datasettf.logging.set_verbosity(tf.logging.ERROR)
pd.options.display.max_rows = 10
pd.options.display.float_format = '{:.1f}'.format
  • 加载数据集
california_housing_dataframe = pd.read_csv("https://download.mlcc.google.cn/mledu-datasets/california_housing_train.csv", sep=",")

对数据进行随机化处理,以确保不会出现任何病态排序结果(可能会损害随机梯度下降法的效果)。此外,将 median_house_value 调整为以千为单位,这样,模型就能够以常用范围内的学习速率较为轻松地学习这些数据。

california_housing_dataframe = california_housing_dataframe.reindex(np.random.permutation(california_housing_dataframe.index))
california_housing_dataframe["median_house_value"] /= 1000.0
california_housing_dataframe

output would be like this:

检查数据

使用数据前利用california_housing_dataframe.describe()对数据进行统计处理,得到关于各列的一些实用统计信息快速摘要:样本数、均值、标准偏差、最大值、最小值和各种分位数。

california_housing_dataframe.describe()

output would be like this:

开始构建第一个模型

练习目标是尝试预测median_house_value的值,使用total_rooms作为输入特征。
为了训练模型,这里使用TensorFlow Estimator API 提供的LinearRegressor接口。此 API 负责处理大量低级别模型搭建工作,并会提供执行模型训练、评估和推理的便利方法。

定义特征并配置特征列

为了将训练数据导入 TensorFlow,需要指定每个特征包含的数据类型。主要使用以下两类数据:

  • 分类数据,文字型数据,不包含任何分类特征,包括一些无用的文字或修饰词。
  • 数值数据,数值型数据(整数或者浮点)。
    此时的输入数值特征为total_rooms,下面的代码会从california_housing_dataframe中提取total_rooms数据,并使用numeric_column 来定义特征列,这样会将其数据指定为数值:
# Define the input feature: total_rooms.
my_feature = california_housing_dataframe[["total_rooms"]]# Configure a numeric feature column for total_rooms.
feature_columns = [tf.feature_column.numeric_column("total_rooms")]

注意:total_rooms数据的形状是一维数组(每个街区的房间总数列表)。这是 numeric_column 的默认形状,因此我们不必将其作为参数传递。

定义目标

定义目标,即定义median_housing_dataframe,可以从 california_housing_dataframe 中提取它:

# Define the label.
targets = california_housing_dataframe["median_house_value"]
配置LinearRegressor

使用LinearRegressor配置线性回归模型,使用GradientDescenOptimizer(能实现小批量随机梯度下降法(SGD))训练该模型,learning_rate参数课控制梯度步长的大小。

  • 接下来,我们将使用 LinearRegressor 配置线性回归模型,并使用 GradientDescentOptimizer(它会实现小批量随机梯度下降法 (SGD))训练该模型。learning_rate 参数可控制梯度步长的大小。

注意:为了安全起见,还可以通过 clip_gradients_by_norm 将梯度剪裁应用到优化器。梯度裁剪可确保梯度大小在训练期间不会变得过大,梯度过大会导致梯度下降法失败。

# Use gradient descent as the optimizer for training the model.
my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)# Configure the linear regression model with our feature columns and optimizer.
# Set a learning rate of 0.0000001 for Gradient Descent.
linear_regressor = tf.estimator.LinearRegressor(feature_columns=feature_columns,optimizer=my_optimizer
)

WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.
For more information, please see:

  • https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md
  • https://github.com/tensorflow/addons
    If you depend on functionality not listed there, please file an issue.
定义输入函数

要将据导入 LinearRegressor,需要定义一个输入函数,让它告诉 TensorFlow 如何对数据进行预处理,以及在模型训练期间如何批处理、随机处理和重复数据。
首先,将 Pandas 特征数据转换成 NumPy 数组字典。然后,使用 TensorFlow Dataset API 根据数据来构建 Dataset 对象,并将数据拆分成大小为 batch_size 的多批数据,以按照指定周期数 (num_epochs) 进行重复。

注意:如果将默认值 num_epochs=None 传递到 repeat(),输入数据会无限期重复。

然后,如果 shuffle 设置为 True,则会对数据进行随机处理,以便数据在训练期间以随机方式传递到模型。buffer_size 参数会指定 shuffle 将从中随机抽样的数据集的大小。

最后,输入函数会为该数据集构建一个迭代器,并向 LinearRegressor 返回下一批数据。

训练模型

在 linear_regressor 上调用 train() 来训练模型。将 my_input_fn 封装在 lambda 中,以便可以将 my_feature 和 target 作为参数传入(有关详情,请参阅 TensorFlow 输入函数教程),首先训练 100 步。

_ = linear_regressor.train(input_fn = lambda:my_input_fn(my_feature, targets),steps=100
)
评估模型

基于训练数据做一次预测,看模型在训练期间与这些数据的拟合情况。
注意:训练误差可以衡量模型与训练数据的拟合情况,但并不能衡量模型泛化到新数据的效果。

…不想搬了,待续

「Tensorflow」TensorFlow基本使用步骤——以线性回归为练习相关推荐

  1. tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I

    " 一文概览Tensorflow方方面面." 大家好,我是人工智能工程师Alpha浪. 今天,我们开始「动手学习Tensorflow - Tensorflow 综述」部分. 快速学 ...

  2. 强化学习如何真正实现任务自动化?不妨试试「两步走」策略!

    导语:强化学习会是我们开启自动化之门的金钥匙吗? 雷锋网 AI 科技评论按:作为行为主义学派的重要技术,近年来,强化学习在 Atari 游戏领域大放异彩.然而,人们要想将强化学习技术真正应用于现实世界 ...

  3. 官方文档太辣鸡?TensorFlow 2.0开源工具书,30天「无痛」上手

    本文转载自机器之心. 项目作者:lyhue1991 「官方文档排布凌乱.搜索难用.API 丑陋不堪--」这是很多人对 TensorFlow 官方文档的吐槽.但吐槽归吐槽,到了工业界,你是无论如何也绕不 ...

  4. TensorFlow新功能「AutoGraph」:将Python转换为计算图

    伊瓢 编译自 TensorFlow博客  量子位 报道 | 公众号 QbitAI 昨天,TensorFlow推出了一个新功能「AutoGraph」,可以将Python代码(包括控制流print()和其 ...

  5. 使用tensorflow建模LSTM的详细步骤通俗易懂解读

    使用tensorflow建模LSTM的详细步骤人性化解读 一步步条理清晰的写tensorflow代码 Understanding LSTM in Tensorflow(MNIST dataset) L ...

  6. 「萌新上手Mac」安装软件,步骤超简单

    回想起刚拿到Mac 时,安装软件的确是个让我手足无措的难题,不知道大家有没有同样的感受?这边就教大家Mac 安装软件的几种方法! Mac 安装软件方法一:从App Store 苹果在2011 年时释出 ...

  7. ChatGPT被「神秘代码」攻破安全限制!毁灭人类步骤脱口而出,羊驼和Claude无一幸免...

    克雷西 发自 凹非寺 量子位 | 公众号 QbitAI 大模型的「护城河」,再次被攻破. 输入一段神秘代码,就能让大模型生成有害内容. 从ChatGPT.Claude到开源的羊驼家族,无一幸免. 近日 ...

  8. 开源教程 「nlp-tutorial」!用百行代码搞定各类NLP模型

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 参与:思源.贾伟   来源:机器之心 NLP 的研究,从词嵌入到 CNN ...

  9. 「文本信息抽取与结构化」详聊文本的结构化「下」

    2020-02-19 08:20:08 常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识 ...

最新文章

  1. 你可以把编程当做一项托付终身的职业
  2. 出场率比较高的一道多线程安全面试题
  3. 基于主成分分析法的综合评价模型及matlab实现
  4. java 观察者模式示例_观察者设计模式示例
  5. 【原创】指针和下标的10条对比
  6. Android逆向笔记-使用dnSpy修改C#的dll(安卓游戏中使用资源不减反加)
  7. Linux终端下打印带颜色的信息
  8. IP头TCP头的checksum校验和计算
  9. 【c语言】用指针变量输出一维数组中的数据
  10. css用边框实现圆角矩形
  11. Codeforces Round #483 (Div. 1) A. Finite or not?
  12. markdown生成chm电子书或在线文档
  13. namesilo域名注册教程
  14. 讯飞 AIUI 集成
  15. 水瓶座|水瓶座性格分析
  16. AES算法中S盒的FPGA实现
  17. 【机器学习】深度学习框架是什么?有哪些?如何选择?
  18. 30岁转行做程序员是一种怎样的体验?
  19. JS判断某年某月有多少天
  20. 5.9_googlenet

热门文章

  1. python socket服务器_python网络编程学习笔记(三):socket网络服务器
  2. Python学习笔记--数据类型
  3. VTK:规则多边形源用法实战
  4. opengl加载显示3D模型UC类型文件
  5. OpenCASCADE绘制测试线束:检查器命令之Inspector
  6. wxWidgets:将所有内容与 wxString 相互转换
  7. boost::statechart模块实现使用正交状态和 state_downcast 查询正交区域的状态的测试程序
  8. boost::range::for_each相关的测试程序
  9. boost::outcome模块outcome相关的测试程序
  10. boost::mp11::mp_reverse_fold相关用法的测试程序