# TensorFlow入门教程

### TensorFlow简介

TensorFlow是谷歌开源的AI开发工具，可以用于实现普通的机器学习算法(linear regression，logistic regression)，也可以用于实现深度学习算法(各种不同类型的神经网络)。TensorFlow为深度学习进行了大量优化，使用TensorFlow提供的API，AI开发者能够更加简单地实现神经网络算法。

### 鸢尾花分类

iris_training.csv是训练数据，它提供了120个鸢尾花的花萼和花瓣的长宽数据，并且标记了所属的鸢尾花类别。

### 代码解释

train.py训练神经网络的代码：

```# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import os
import tensorflow as tf
import tensorflow.contrib.eager as tfe
from parse_csv import parse_csv

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
tf.enable_eager_execution()

# 导入训练数据
TRAIN_DATASET = tf.data.TextLineDataset("/tensorflow-101/data/iris_training.csv")
TRAIN_DATASET = TRAIN_DATASET.skip(1)             # skip the first header row
TRAIN_DATASET = TRAIN_DATASET.map(parse_csv)      # parse each row
TRAIN_DATASET = TRAIN_DATASET.shuffle(buffer_size=1000)  # randomize
TRAIN_DATASET = TRAIN_DATASET.batch(32)

# 定义神经网络
MODEL = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation="relu", input_shape=(4,)),  # input shape required
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(3)
])

# 损失计算函数
def loss(model, x, y):
y_ = model(x)
return tf.losses.sparse_softmax_cross_entropy(labels=y, logits=y_)

# 梯度计算函数
loss_value = loss(model, inputs, targets)

# 优化器

def train():

print("训练:")

num_epochs = 201

for epoch in range(num_epochs):

epoch_loss_avg = tfe.metrics.Mean()
epoch_accuracy = tfe.metrics.Accuracy()

for x, y in TRAIN_DATASET:

# 计算梯度

# 优化模型的参数

# 计算损失
epoch_loss_avg(loss(MODEL, x, y))

# 计算准确度
epoch_accuracy(tf.argmax(MODEL(x), axis=1, output_type=tf.int32), y)

if epoch % 50 == 0:
print("Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}".format(epoch, epoch_loss_avg.result(), epoch_accuracy.result()))

return MODEL```

```MODEL = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation="relu", input_shape=(4,)),
tf.keras.layers.Dense(10, activation="relu"),
tf.keras.layers.Dense(3)
])```

```def train():

print("训练:")

num_epochs = 201

for epoch in range(num_epochs):

epoch_loss_avg = tfe.metrics.Mean()
epoch_accuracy = tfe.metrics.Accuracy()

for x, y in TRAIN_DATASET:

# 计算梯度

# 优化模型的参数

# 计算损失
epoch_loss_avg(loss(MODEL, x, y))

# 计算准确度
epoch_accuracy(tf.argmax(MODEL(x), axis=1, output_type=tf.int32), y)

if epoch % 50 == 0:
print("Epoch {:03d}: Loss: {:.3f}, Accuracy: {:.3%}".format(epoch, epoch_loss_avg.result(), epoch_accuracy.result()))

return MODEL```

train函数的算法是这样的：

• 迭代计算200个epoch，每一个epoch迭代都会扫描整个训练数据集；
• 每个epoch中，会iterate整个训练数据集中的120个样本，其batch size为32，所以一个epoch需要4个iteration；
• 每个iteration中，根据样本的特征值(花萼和花瓣的长宽)，使用神经网络做出预测(所属鸢尾花类别)，与真实的标记值进行比较，计算损失及梯度。
• 每个iteration中，根据所计算的梯度，使用优化器修改神经网络中的参数值。
• 经过200个epoch，神经网络中的参数将会调整到最优值，使得其预测结果误差最低。

### 基于Docker运行TensorFlow

#### 克隆代码

```git clone https://github.com/Fundebug/tensorflow-101.git
cd tensorflow-101```

#### 构建镜像

`sudo docker build -t tensorflow .`

#### 运行容器

`sudo docker run -i tensorflow python src/main.py`

#### 运行结果

```训练:
Epoch 000: Loss: 1.142, Accuracy: 29.167%
Epoch 050: Loss: 0.569, Accuracy: 78.333%
Epoch 100: Loss: 0.304, Accuracy: 95.833%
Epoch 150: Loss: 0.186, Accuracy: 97.500%
Epoch 200: Loss: 0.134, Accuracy: 98.333%

Test set accuracy: 96.667%

Example 0 prediction: Iris setosa
Example 1 prediction: Iris versicolor
Example 2 prediction: Iris virginica```

0 条评论

• ### Deepin配置TF GPU环境

使用conda安装GPU加速版本的TensorFlow时，将自动安装GPU支持所需的CUDA和CuDNN库。不需要再额外安装这些库了。而且与 pip 安装相比，...

• ### 2019年NVIDIA 10大开发者故事：第一名你绝对想不到...

从基于jetson的服务robodog，到能够即时检测血液中癌症的算法，这些都是今年在NVIDIA开发者新闻中心报道的十大AI开发者故事。

• ### TensorFlow 内核剖析

这是我找的一个Tensorflow的书，作者是刘光聪。书写的非常不错，我也借此机会学习一波。书中的TensorFlow使用的是1.2版本，目前来说算是很新的。 ...

• ### 《机器学习实战：基于Scikit-Learn、Keras和TensorFlow》第13章 使用TensorFlow加载和预处理数据

Data API还可以从现成的文件（比如CSV文件）、固定大小的二进制文件、使用TensorFlow的TFRecord格式的文件（支持大小可变的记录）读取数据。...

• ### TensorFlow，Raspberry Pi和Pan-Tilt HAT实时对象跟踪

https://github.com/leigh-johnson/rpi-deep-pantilt

• ### 深度学习环境配置有哪些坑？

深度学习第一问是关于环境配置的。之前笔者也在深度学习60讲系列中讲到如何配置深度学习开发环境的问题：深度学习笔记15：ubuntu16.04 下深度学习开发环境...

• ### Tensorflow Object_Detection

官方链接在这里。这里我没有下载整个models，在linux下面只下载了Object_Detection。方法如下：

• ### 《机器学习实战：基于Scikit-Learn、Keras和TensorFlow》第12章 使用TensorFlow自定义模型并训练

目前为止，我们只是使用了TensorFlow的高级API —— tf.keras，它的功能很强大：搭建了各种神经网络架构，包括回归、分类网络、Wide & De...

• ### Keras基本用法

Keras是目前使用最为广泛的深度学习工具之一，它的底层可以支持TensorFlow、MXNet、CNTK和Theano。如今，Keras更是被直接引入了Ten...

• ### 可视化ML实验数据：谷歌推出免费托管服务，TensorBoard.dev可在线一键共享

【新智元导读】谷歌推出TensorBoard，一种全新的在线分享机器学习实验结果平台。TensorFlow的可视化工具包TensorBoard经常被研究人员和工...

Fundebug技术总监