原文链接:https://developers.google.com/machine-learning/crash-course/first-steps-with-tensorflow/
1- 工具包
TensorFlow工具包的层次结构
- Estimator (tf.estimator): 高级 OOP API,与scikit-learn API兼容
- tf.layers/tf.losses/tf.metrics: 用于常见模型组件的库
- TensorFlow: 低级API
TensorFlow由“图协议缓冲区”和“执行(分布式)图的运行时”两个组件组成,这两个组件类似于Java编译器和JVM。
类似JVM,TensorFlow也能实施在多个硬件平台(CPU 和 GPU)上。
应该使用哪个 API?
- 应该使用能够解决问题的最高级抽象层。
- 较高级别的抽象层更易于使用,但(设计方面)不够灵活。建议您先从最高级 API 入手,让所有组件正常运作起来。
- 如果希望在某些特殊建模方面能够更加灵活一些,则可以降低一个级别。
- 请注意,每个级别都是使用低级 API 构建的,因此降低层次结构级别应该比较直观。
在MLCC中将使用 tf.estimator 对模型进行编码,来完成大部分练习。
2- 练习
按照指定顺序运行以下三个练习:
- Pandas 简介:Pandas 是用于进行数据分析和建模的重要库,广泛应用于 TensorFlow 编码。该教程提供了学习本课程所需的全部 Pandas 信息。如果已了解 Pandas,则可以跳过此练习。
- 使用 TensorFlow 的起始步骤:此练习介绍了线性回归。
- 合成特征和离群值:此练习介绍了合成特征以及输入离群值带来的影响。
MLCC中的常用超参数
- steps:训练迭代的总次数。一步计算一批样本产生的损失,然后使用该值修改一次模型的权重。
- batch siz:单步的样本数量(随机选择)。例如,SGD 的批次大小为 1。
$total\,number\,of\,trained\,examples = batch\,size * steps$
MLCC中的方便变量
- periods:控制报告的粒度。
例如,如果 periods
设为 7 且 steps
设为 70,则练习将每 10 步输出一次损失值(即 7 次)。
与超参数不同,不希望修改 periods
的值。
请注意,修改 periods
不会更改模型所学习的规律。
$number\,of\,training\,examples\,in\,each\,period = frac{batch\,size * steps} {periods}$
2.1- Pandas简介
- HomePage : http://pandas.pydata.org/
- Docs : http://pandas.pydata.org/pandas-docs/stable/index.html
- 针对Python语言的开源数据分析处理工具,可以提供高性能、易用的数据结构;
主要数据结构
- DataFrame: 数据框架是用于数据操控的一种常用抽象实现形式,可以理解为一个关系型数据表格,其中包含多个行和已命名的列。
- Series: 单一列。DataFrame 中包含一个或多个 Series,每个 Series 均有一个名称。
示例讲解
# coding=utf-8 import pandas as pd import matplotlib.pyplot as plt import numpy as np print("version: ", pd.__version__) # ### 显示设置 # 默认情况下,如果DataFrame的行列数量太多,print将只显示部分内容 pd.set_option('display.max_columns', None) # 显示所有列 pd.set_option('display.max_rows', None) # 显示所有行 pd.set_option('max_colwidth', 100) # 设置value的显示长度为100,默认为50 # ### 基本概念 city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento']) # 构建Series对象 population = pd.Series([852469, 1015785, 485199]) # 构建Series对象 maps = pd.DataFrame({'City name': city_names, 'Population': population}) # 创建DataFrame对象 print("DataFrame: ", " ", maps) # 如果Series在长度上不一致,系统会用特殊的NA/NaN值填充缺失的值 california_housing_dataframe = pd.read_csv("Zcalifornia_housing_train.csv", sep=",") # 将整个文件加载到DataFrame info = california_housing_dataframe.describe() # 使用DataFrame.describe来显示关于DataFrame的统计信息 print(info) info_head = california_housing_dataframe.head() # 显示DataFrame的前几个记录 print(info_head) hist = california_housing_dataframe.hist('housing_median_age') # 绘制图表:使用DataFrame.hist快速了解一个列中值的分布 print(hist) plt.show() # 显示图表 # ### 访问数据 # 以Python的dict/list方式访问DataFrame数据 # 文档: http://pandas.pydata.org/pandas-docs/stable/indexing.html cities = pd.DataFrame({'City name': city_names, 'Population': population}) print(type(cities['City name']), type(cities[0:2]), type(cities['City name'][1])) print(cities) print(cities['City name']) print(cities[0:2]) print(cities['City name'][1]) # ### 操控数据 print(population / 1000) # 可以向Series应用Python的基本运算指令 print(np.log(population)) # Series对象可用作大多数NumPy函数的参数 print(population.apply(lambda val: val > 1000000)) # 创建一个population是否超过100万的新Series对象 # 使用Series.apply进行复杂的单列转换,Series.apply将以参数形式接受 lambda 函数,而该函数会应用于每个值 cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92]) # 向现有DataFrame添加Series cities['Population density'] = cities['Population'] / cities['Area square miles'] # 添加Series cities['wide_saint'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San')) # 添加Series # 注意:布尔值Series是使用“按位”而非传统布尔值“运算符”组合的,因此执行逻辑与时,应使用&,而不是and print(cities) # ### 索引 # 文档:http://pandas.pydata.org/pandas-docs/stable/indexing.html#index-objects # Series和DataFrame对象定义了index属性,该属性会向每个Series项或DataFrame行赋一个标识符值 # 默认情况下,在构造时,pandas会赋可反映源数据顺序的索引值 # 索引值在创建后是稳定的,不会因为数据重新排序而发生改变 print(city_names.index) print(cities.index) # reindex方法 # 文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html print(cities.reindex([2, 0, 1])) # 调用DataFrame.reindex来手动重新排列各行的顺序 cities.reindex(np.random.permutation(cities.index)) # 将cities.index传递至NumPy的random.permutation函数,随机排列其值的位置 print(cities) # reindex方法允许使用未包含在原始DataFrame索引值中的索引值,reindex会为此类“丢失的”索引添加新行,并在所有对应列中填充NaN值 print(cities.reindex([0, 4, 5, 2]))
2.2- 使用TensorFlow的起始步骤
xxx
2.3- 合成特征和离群值
xxx
3- 关键词
Estimator
tf.Estimator 类的一个实例,用于封装负责构建 TensorFlow 图并运行 TensorFlow 会话的逻辑。
可以创建自定义 Estimator(https://www.tensorflow.org/guide/custom_estimators),也可以实例化其他人预创建的 Estimator。
图 (graph)
TensorFlow 中的一种计算规范。
图中的节点表示操作。边缘具有方向,表示将某项操作的结果(一个张量)作为一个操作数传递给另一项操作。
可以使用 TensorBoard 直观呈现图。
张量 (Tensor)
TensorFlow 程序中的主要数据结构。
张量是 N 维(其中 N 可能非常大)数据结构,最常见的是标量、向量或矩阵。
张量的元素可以包含整数值、浮点值或字符串值。
操作 (op, Operation)
TensorFlow 图中的节点。
在 TensorFlow 中,任何创建、操纵或销毁张量的过程都属于操作。
例如,矩阵相乘就是一种操作,该操作以两个张量作为输入,并生成一个张量作为输出。
会话 (tf.session)
封装了 TensorFlow 运行时状态的对象,用于运行全部或部分图。
在使用底层 TensorFlow API 时,您可以直接创建并管理一个或多个 tf.session 对象。
在使用 Estimator API 时,Estimator 会为您创建会话对象。