由于自己的研究方向主要是文本处理、分类、预测。在学习了深度学习的基本代码后,最近实践文本相似度的相关深度模型的过程中,由于对Tensorflow框架的了解太少,在看别人写的代码的过程中,有些困惑,所以就抽出点时间学了一下Tensorflow框架。这里主要讲解学习炼数成金的Tensorflow视频教程的学习笔记。

此视频课程的课程大纲如下:
第一课 Tensorflow简介,Anaconda安装,Tensorflow的CPU版本安装。
第二课 Tensorflow的基础使用,包括对图(graphs),会话(session),张量(tensor),变量(Variable)的一些解释和操作。
第三课 Tensorflow线性回归以及分类的简单使用,softmax介绍。
第四课 交叉熵(cross-entropy),过拟合,dropout以及Tensorflow中各种优化器的介绍。
第五课 使用Tensorboard进行结构可视化,以及网络运算过程可视化。
第六课 卷积神经网络CNN的讲解,以及用CNN解决MNIST分类问题。
第七课 递归神经网络LSTM的讲解,以及LSTM网络的使用。
第八课 保存和载入模型,使用Google的图像识别网络inception-v3进行图像识别。
第九课 Tensorflow的GPU版本安装。设计自己的网络模型,并训练自己的网络模型进行图像识别。
第十课 多任务学习以及验证码识别。
第十一课 word2vec讲解和使用,cnn解决文本分类问题。
第十二课 语音处理以及使用LSTM构建语音分类模型。

由于我有一定的基础了,所以我是选择性的学习的。

第四课:Tensorflow中各种优化介绍(学习率更改、权重w的初始化、优化器Optimizer的选择、激活函数的选择、Dropout的使用、代价函数的选择)

1. 学习率的更改,伪代码如下:

lr = tf.Variable(0.001, dtype=tf.float32)
# ...
train_step = tf.train.AdamOptimizer(lr).minimize(loss)
# ...
for step in range(100):sess.run(tf.assign(lr, 0.001 * (0.95 ** step)))for batch in batches:# trainlearning_rate = sess.run(lr)# 输出准确率

2. 权重w的初始化

w = tf.Variable(tf.truncated_normal([diminput, dimhidden], stddev=0.1))

3. 优化器Optimizer的选择

标准梯度下降法:计算所有样本汇总误差,根据总误差来更新权值;缺点:太慢;
随机梯度下降法:随机抽取一个样本来计算误差,然后更新权值;缺点:对噪声过于敏感
批量梯度下降法:算是一种折中方案,从总样本中选取一个批次,计算该批次数据误差,来更新权值;

Tensorflow中的优化器:

各种优化器的实验效果比较一:

排名:Adadelta、Adagrade、Rmsprop、NAG、Momentum、SGD

各种优化器的实验效果比较二:鞍点问题


排名:
Adadelta以很快的速度冲下来;
NAG在最初的迷茫之后快速走下鞍点,速度很快;
Momentum也在迷茫之后走下鞍点,但是没有NAG;
Rmsprop没有迷茫,但是下降速度有点慢;
Adagrad 也没有迷茫,但是速度更慢;
SGD,直接在鞍点下不来了。

总结:

优化器各有优缺点,别的优化器收敛速度会比较快,但是SGD最后的结果一般来说很好。
以下网址有不错的优化器的总结,可以参考:

https://blog.csdn.net/g11d111/article/details/76639460

4. Dropout的使用

dropout主要是解决过拟合问题

过拟合的解决方法有三种:增加数据集、正则化方法、Dropout

Dropout的实现方式如下:

Layer1_y = tf.nn.softmax(x)
Layer1_drop = tf.nn.dropout(Layer1_y, keep_prob)

5.代价函数的选择

一般训练都是以梯度下降来实现的。

代价函数用来计算损失,Tensorflow中主要用三种代价函数:

总的来说:输出神经元是线性的,用二次代价函数;输出神经元是S型的函数,如果用的sigmoid激活函数,使用交叉熵代价函数;如果用的softmax激活函数,使用对数似然代价函数。

(1)二次代价函数:

loss = tf.reduce_mean(tf.square(y - y_pred))

二次代价函数在梯度下降时与激活函数的导数有关系,就会导致问题。

(2)交叉熵:解决了二次代价函数的问题

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_pred))
# y_pred是用softmax激活函数
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=y_pred))
# y_pred是用sigmoid激活函数

第五课 使用Tensorboard进行结构可视化。查看网络结构、查看网络运行数据、以手写字分类为例实现训练的可视化。

1. 查看网络结构

# 一般写神经网络都会写
with tf.name_scope("***"):W = tf.Variable("***", name="W")  b = tf.Variable("***", name="b")
# ...
writer = tf.summary.FileWriter(FLAGS.data_dir, graph=sess.graph)
# 运行就ok了,然后在cmd中切换到相应保存的磁盘中,输入:tensorboard --logdir=(writer保存的路径)
# 会出现一个网址,复制,在浏览器中打开

大致效果如下:

2.查看网络运行数据

# 1.定义一个方法
def variable_summaries(var):with tf.name_scope('summaries'):mean = tf.reduce_mean(var)tf.summary.scalar('mean', mean)     # 平均值with tf.name_scope('stddev'):stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))tf.summary.scalar('stddev', stddev)     # 标准差tf.summary.scalar("max", tf.reduce_max(var))    # 最大值tf.summary.scalar('min', tf.reduce_min(var))    # 最小值tf.summary.histogram('histogram', var)      # 直方图
#
# 2. 使用方法,如w的数据变化:一般查看loss,w,b,accuracy
# W值的查看
W = tf.Variable("***", name="W")
variable_summaries(W)
# loss值的查看
loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=y_pred))
tf.summary.scalar('loss', loss)
# accuracy值的查看
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
tf.summary.scalar('accuracy', accuracy)# 3. 合并所有的summary
merged = tf.summary.merge_all()# 4. 在运行的代码加上merged
summary, _ = sess.run([merged, train_step], feed_dict={x:batch_x, y:batch_y})# 5. 把summary添加至writer中
writer.add_summary(summary, step)# 注意:一般我们训练时使用的是如下格式:
for step in range(100):for batch in batches:summary, _ = sess.run([merged, train_step], feed_dict={x:batch_x, y:batch_y})writer.add_summary(summary, step)# 这一格式会使得样本点比较少,画出的图形不够平滑,想要使得样本点多,可以采用如下形式:
for step in range(100):batch_x, batch_y = mnist.train_next_batch(100)summary, _ = sess.run([merged, train_step], feed_dict={x: batch_x, y: batch_y})writer.add_summary(summary, step)# 6.最后在网页上浏览就有图像显示
# 如果loss的生成图上下跳动很厉害的话,说明learning_rate设置大了。

大致效果如下:

3. 以手写字分类为例实现训练的可视化。

具体实现我没看,主要自己不做图像处理这块,所以就只了解了哈,这里截了一下最终的效果图:

训练前数据分布:

训练后数据分布:

第八课 主要讲解:保存和载入模型,使用Google的图像识别网络inception-v3进行图像识别。

1. 保存模型

saver = tf.train.Saver()
with tf.Session() as sess:sess.run(init)for epoch in range(21):for batch in range(n_batch):# trainacc = sess.run(accuracy, feed_dict={x: mnist.test.images, y: mnist.test.labels})print("Iter " + str(epoch) + " Testing Accuracy: " + str(acc))saver.save(sess, model_dir + '/test_net.ckpt')

2.载入模型

saver = tf.train.Saver()
with tf.Session() as sess:sess.run(init)acc1 = sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels})saver.restore(sess, model_dir + '/test_net.ckpt')acc2 = sess.run(accuracy, feed_dict={x:mnist.test.images,y:mnist.test.labels})print(" Init Accuracy" + str(acc1))print(" Restore Accuracy: " + str(acc2))

3. 使用inception-v3进行图像识别

这里我也没看,主要自己不做图像处理这块。以后用到的话可以补一下。

第九课 Tensorflow的GPU版本安装。设计自己的网络模型,并训练自己的网络模型进行图像识别。

这节主要讲解如何训练自己的模型代码,主要有三种方法:

1. 自己写自己从头构建网络,从头训练;

2. 用一个现成的质量比较好的模型,固定前面参数,在后面添加几层,训练后面的参数;

3. 改造现成的质量比较好的模型,训练整个网络的模型(初始层的学习率比较低);也就是对已有模型的权重参数做微调,重点训练最后几层自己写的模型的权重参数,但总体来说所有的权重参数都有改变。

第十一课 word2vec讲解和使用,cnn解决文本分类问题。

对于这一节课的内容,我在后边有一节专门讲解word2vec预训练的时候着重讲解。

深度学习(六):炼数成金的Tensorflow教程学习笔记(含代码)相关推荐

  1. 【备忘】2017年最新炼数成金机器读心术之神经网络与深度学习视频教程

    课程大纲: 第1课 跌宕起伏70年:神经网络发展概述:最简单的神经元仿生:单层感知器. 第2课 线性神经网络,BP神经网络,基于梯度下降的各种学习算法:BP神经网络应用:信用识别:为什么BP网络丌能支 ...

  2. 炼数成金Tensorflow学习笔记之2.2_变量

    炼数成金Tensorflow学习笔记之2.2_变量 代码及分析 代码及分析 import tensorflow as tfx = tf.Variable([1, 2]) a = tf.constant ...

  3. 炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例

    炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例 代码及分析 代码及分析 # -*- coding: utf-8 -*- """ Created ...

  4. 炼数成金数据分析课程---8、数据清洗

    炼数成金数据分析课程---8.数据清洗 一.总结 一句话总结: 数据分析课程的实质是:介绍库中的函数:介绍py的3个常用的数据分析库(numpy,pandas,scipy)的函数的操作 实例:其实找几 ...

  5. 炼数成金数据分析课程---16、机器学习中的分类算法(交叉内容,后面要重点看)...

    炼数成金数据分析课程---16.机器学习中的分类算法(交叉内容,后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用分类算法(如Knn.决策树.贝叶斯分类器等)的原理及pytho ...

  6. 炼数成金数据分析课程---17、机器学习聚类算法(后面要重点看)

    炼数成金数据分析课程---17.机器学习聚类算法(后面要重点看) 一.总结 一句话总结: 大纲+实例快速学习法 主要讲解常用聚类算法(比如K-means等)的原理及python代码实现:后面学习聚类的 ...

  7. 炼数成金数据分析课程---13、回归分析

    炼数成金数据分析课程---13.回归分析 一.总结 一句话总结: 大纲+实例快速学习法 主要内容是回归分析的原理及编程实现 1.回归分析是什么? 通过建立模型来研究变量之间相互关系的密切程度.结构状态 ...

  8. python数据内容_炼数成金:Python数据分析内容分享

    相信看这篇文章的每一位朋友,都有过努力学习 炼数成金:Python数据分析     这个课程.提升自我的想法, 可是学习是一件非常反人性的事情,大多数人都是晚上想想千条路,早上醒来走原路.  也相信很 ...

  9. 炼数成金R七种武器之金融数据分析quantmod

    更多资源进群: 377215114 炼数成金<数据分析,展现与R语言>课程上线已经有18个月,至今已经培训了近千名学员,对在中国推动开源数据分析软件起到了重要作用.应广大受众的要求,我们在 ...

  10. 炼数成金数据分析课程---7、数据分析简介

    炼数成金数据分析课程---7.数据分析简介 一.总结 一句话总结: 我终于知道他们是要做一些什么样的工作了 1.我们导入了数据,是否可以立即进行数据分析? 需要对数据做预处理:比如去除脏数据这些 2. ...

最新文章

  1. [译] CSS 变量实现炫酷鼠标悬浮效果
  2. 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天
  3. java代码从编译到加载执行的过程
  4. 为什么我不选阿里云(一)
  5. matlab生成exe独立运行文件已破解(好用)
  6. C++学习之路 | PTA(甲级)—— 1099 Build A Binary Search Tree (30分)(带注释)(精简)
  7. Android 动态移动控件实现
  8. SpringBoot中如何优雅的使用拦截器
  9. java ftl导出pdf_java根据模板导出PDF详细教程
  10. ADS仿真5_LNA设计
  11. H3C VRRP实验
  12. pagefile.sys 分页文件貌似不能放在移动硬盘上
  13. vue_elementui拖住滑块拼图验证代码
  14. c语言试讲10分钟教案,10分钟,写出一份满意的试讲教案
  15. 西湖大学人工智能与生物医学影像实验室招聘科研助理及博士后
  16. C/C++、OS、网络面经
  17. iPhone连接mac电脑连接时反复连接与断开情况的处理
  18. AMD领先英特尔发表工作频率3.4THz的晶体管 (转)
  19. C++折半查找具体介绍及用法
  20. 如何升级或更换PC的无线卡

热门文章

  1. 初学者:html中的表单详解(下面附有代码)
  2. android如何使用so库,Android 使用SO库
  3. #微信公众号互联登录-01#
  4. CSS学习笔记 - 布局
  5. 如何回答“你没有经验,我们为什么录用你”
  6. RabbitMQ虚拟主机
  7. Python TIN网生成(Delaunay三角形)
  8. C语言任意输入三个数构成三角形,随便输入三个数,看能否组成一个三角形
  9. h5 字体加粗_HTML中如何将字体加粗
  10. Hopscotch(POJ-3050)