TensorFlow (未完待续……)

一、几个基本概念

1. 前向传播

输入 ------(模型+参数)------> 输出

2. 损失函数

(1) 分类问题:交叉熵 + softmax -> tf.nn.sparse_softmax_cross_entropy_with_logits()

(2) 回归问题:MSE均方误差

3. 反向传播

调整参数使得损失函数的差距变小

(1) 反向传播算法:所有参数

(2) 梯度下降法:单个参数

4. 激活函数

神经网络 线性->非线性

(1) ReLU: f(x)=max(x,0)

(2) sigmoid: f(x)=1/(1+e^(-x))

(3) tanh: f(x)=(1-e^(-2x)/(1+e^(-2x))

5. 监督学习

在已知答案的标注数据集上,模型给出的预测结果要尽量接近真实的答案。

 

二、TensorFlow入门

1. 计算图

(1) TensorFlow是一个通过计算图的形式来表述计算的编程系统

(2) 图必须在会话(session)里启动。

2.张量

(1) 张量(Tensor)和变量(Variable)都有

  • 形状 - .shape
  • 类型 - .dtype
  • 值 - .numpy()

*变量类型不可变,但维度可变(在assign()的参数里指定validate_shape=False)。

(2) 张量支持的类型

  • 实数:float32, float64
  • 整数:int8, int16, int32, int64, uint8
  • 布尔型:bool
  • 复数:complex64, complex128

3. TensorFlow游乐场

http://playground.tensorflow.org

4. 神经网络反向传播优化流程图

5 训练神经网络的过程

(1) 定义神经网络的结构和前向传播的输出结果。

(2) 定义损失函数以及选择反向传播优化的算法。

(3) 生成会话(tf.Session)并且在训练数据上反复运行反向传播优化算法。

 

三、深层神经网络

y = x * W + bias

1. 全连接神经网络

2. 神经网络优化算法

(1) 深度学习的优化算法,说白了就是梯度下降

  • 标准梯度下降:先计算样本汇总的误差,然后根据总误差来更新权值。
  • 随机梯度下降:随机抽取一个样本来计算误差,然后更新权值。
  • 批量梯度下降:以总样本抽取一个批次(比如1万个样本选取100个样本作为1个batch),然后计算这个batch的总误差,根据总误差来更新权值。

(2) 学习率逐渐变小可以使训练结果收敛。比如学习率设为0.95^n (n为训练次数)。

(3) 滑动平均模型:y = min {decay, (1 - 9 / (new_num + 10))}    (decay一般为非常接近1的数,eg. 0.999或0.9999)

(4) 神经网络优化方向

  • 激活函数
  • 隐藏层
  • 滑动平均模型
  • 指数衰减的学习率
  • 正则化损失

 

四、卷积神经网络

1. MNIST数据处理

(1) 图分的分辨率为width*height,而image的shape为[height, width, channel],长和宽的顺序不一样。

(2) TensorFlow模型一般会存在后缀为 .ckpt 的文件中。

  • model.ckpt.meta: 计算图中节点及元数据。
  • model.ckpt.index: 保存所有变量的取值。
  • model.ckpt.data-*****-of-*****: 同上。
  • checkpoint: 所有模型文件的文件名。

2.卷积神经网络(Convolutional Neural Network, CNN)

(1) 卷积层(Convolution):侦测pattern不需要看看整个image,只看一小部分就行。同样的pattern会出现在图片中的不同位置。(有多少个filter,输出的深度就是多少)

  • tf.nn.conv2d()

(2) 池化层(Pooling):降采样(梯度下降)

  • tf.nn.max_pool(): 最大池化层
  • tf.nn.avg_pool(): 平均池化层

3. 经典卷积网络模型

(1) LeNet-5模型

(2) Inception-v3模型

4. 神经网络迁移

5. TFRecord输入数据格式

  • tf.TFRecordReader(): 读
  • tf.python_io.TFRecordWriter(): 写

6. 图像数据处理

(1) 图像编码处理

  • tf.image.decode_jpeg(): 解码
  • tf.image.encode_jpeg(): 编码

(2) 图像大小调整(处理前将图像转化为实数类型,避免精度损失)

  • tf.image.resize_images(): 拉伸原图像
  • tf.image.resize_image_with_crop_or_pad(): 裁剪或填充图像
  • tf.image.central_crop(): 按比例裁剪/填充图像
  • tf.image.crop_to_bounding_box(): 裁剪指定区域图像
  • tf.image.pad_to_bounding_box(): 填充指定区域图像

(3) 图像翻转

  • tf.image.flip_up_down(): 上下翻转
  • tf.image.flip_left_right(): 左右翻转
  • tf.image.transpase_image(): 对角线翻转
  • tf.image.random_flip_up_down(): 以50%概率上下翻转
  • tf.image.random_flip_left_right(): 以50%概率左右翻转

(4) 图像色彩调整

  • tf.image.adjust_brightness(): 调整亮度(最后须要有截断操作)
  • tf.image.adjust_contrast(): 调整对比度
  • tf.image.adjust_hue(): 调整色相
  • tf.image.adjust_saturation(): 调整饱和度
  • tf.image.per_image_standardization(): 图像标准化
  • tf.image.random_brightness(): 随机调整亮度
  • tf.image.random_contrast(): 随机调整对比度
  • tf.image.random_hue(): 随机调整色相
  • tf.image.random_saturation(): 随机调整饱和度

(5) 处理标注框

  • tf.image.draw_bounding_boxes()

7. 多线程输入数据处理框架

(1) 经典输入数据处理流程:

指定原始数据的文件列表
-> 创建文件列表队列
-> 从文件中读取数据
-> 数据预处理
-> 整理成Batch作为神经网络输入

(2) 队列

  • tf.FIFOQueue(): 先进先出队列
  • tf.RandomShuffleQueue(): 随机队列

(3) 多线程

  • tf.Coordinator.should_stop(): 信号值,决定是否要退出线程
  • tf.Coordinator.request_stop(): 将信号值设为True,通知其它线程退出
  • tf.Coordinator.join(): 等待所有线程完成
  • tf.train.QueueRunner(): 定义QueueRunner
  • tf.train.add_queue_runner(): 添加QueueRunner到默认集合
  • tf.train.start_queue_runner(): 启动QueueRunner

(4) batchsize, iteration 和epoch的区别

  • batchsize: 批大小,即每次训练在训练集中取batchsize个样本训练。
  • iteration: 1个iteration等于使用batchsize个样本训练一次。
  • epoch: 1个epoch等于使用训练集中的全部样本训练一次,通俗的说epoch的值就是整个数据集被轮几次。

eg. 训练集有500个样本,batchsize=10,那么训练完整个样本集: iteration=50,epoch=1。

8. 数据集(Dataset)

dataset = tf.data.TFRecordDatasetJ(input_files)
dataset = dataset.map(parser) # parser is a function which return feature1 and feature2
iterator = dataset.make_one_shot_iterator()
feature1, feature2 = iterator.get_next()

(1) 遍历器包括

  • make_one_shot_iterator
  • make_initializable_iterator
  • make_reinitializable_iterator
  • make_feedable_iterator

 

五、循环神经网络

1. 循环神经网络(Recurrent neural network, RNN)

2. 长短时记忆网络(Long Short Term Memory, LSTM)

 

六、TensorFlow高层封装

1. TensorFlow-Slim和TFLearn

TensorFlow 2.0不支持TensorFlow-Slim和TFLearn,因为tensorflow.contrib在TensorFlow 2.0中被移除了。

2. Keras

3. Estimator

 

七、TensorFlow计算加速——GPU

1. 同步模型 VS 异步模型

(1) 同步模型

优点:不同设备之间完全独立,训练效率高。

缺点:参数更新缺陷,有可能无法达到较优训练结果。

(2) 异步模型

优点:解决异步模型参数更新的问题。

缺点:每一轮训练时间取决于训练最慢的设备,其它完成了的设备很多时间都花在等待上,训练效率低。

2. GPU

GPU增加,处理能力也增加,但是非线性的。

3. 计算图内分布式 VS 计算图之间分布式

 

 

 

附录

API手册:https://docs.w3cub.com/tensorflow~python/

 

1. tf.reduce_xxxx

- tf.reduce_sum() #压缩对所有元素求和,用于降维

- tf.reduce_mean() #压缩对所有元素求平均值

- tf.reduce_logsumexp() #压缩对所有元素求log(sum(exp(x)))

- tf.reduce_max() #压缩对所有元素求最大值

- tf.reduce_min() #压缩对所有元素求最小值

- tf.reduce_prod() #压缩对所有元素求积

- tf.reduce_join() #压缩对所有字符串元素求拼接

- tf.reduce_all() #压缩对所有逻辑元素求与

- tf.reduce_any() #压缩对所有逻辑元素求或

import tensorflow as tf

 

x = tf.constant([[1,1,1],[1,1,1]])
print(tf.reduce_sum(x)) 

# 求和:tf.Tensor(6, shape=(), dtype=int32)


print(tf.reduce_sum(x, 0)) 

# 按列求和:tf.Tensor([2 2 2], shape=(3,), dtype=int32)


print(tf.reduce_sum(x, 1)) 

# 按行求和:tf.Tensor([3 3], shape=(2,), dtype=int32)


print(tf.reduce_sum(x, 1, keepdims=True)) 

# 按照行的维度进行求和: tf.Tensor([[3],[3]], shape=(2, 1), dtype=int32)


print(tf.reduce_sum(x, [0, 1])) 

# 按照行列求和:tf.Tensor(6, shape=(), dtype=int32)

See details at: https://docs.w3cub.com/tensorflow~python/tf/reduce_sum/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值