美文网首页
第六天、手写数字识别改进+TensorBoard(TensorF

第六天、手写数字识别改进+TensorBoard(TensorF

作者: 幽并游侠儿_1425 | 来源:发表于2018-07-22 17:40 被阅读240次

    一、手写数字识别的改进:将识别准确率提高到98%以上

    在代码里

    L1_drop = tf.nn.dropout(L1, keep_prob)

    这一句报错ValueError: Shapes (?, 10) and () are incompatible,可能是定义占位符的时候定义成了:

    keep_prob = tf.placeholder(tf.float32, [None,10])

    应该定义成:

    keep_prob = tf.placeholder(tf.float32)

    这时候如果还报错,可能是后面sess.run的时候没有给keep_prob赋初始值。

    代码如下:使用AdamOptimizer。每迭代一次更新学习率。

    特点:一开始给予更大的学习率快速收敛,之后学习率逐渐降低。

    结果如下:可以发现准确率能达到98%以上。

    二、TensorBoard的网络结构

    用tensorboard来画神经网络的结构。

    需要先定义一个命名空间name_scope。

    然后加一句用于创建新文件夹和画图:

    然后logs文件夹下就会出现一个新的文件。

    之后在windows下打开Anaconda Prompt,路径改到当前磁盘的目录下,比如"d:"

    视频里说打开命令行,但是我的电脑里打开命令行不承认tensorboard这个命令,见下:

    在Anaconda Prompt下输入:"tensorboard --logdir=logs",‘=‘’后面加logs文件夹所在的路径,因为本身就在当前文件夹下,所以直接输入logs就可以了。

    复制最下面一行的网址,粘贴到谷歌浏览器内,就可以看到图了。

    TensorBoard的具体操作:鼠标左键移动,滚轮放大,双击展开。

    一些namespace可以右键并且点“remove from the graph”或者点“add to the graph”移动到右边或者移动到图内。

    然后点击namespace旁边的+号或者双击namespace查看具体内容:输入输出。

    图例如下:

    继续定义一个命令空间:

    删除上一个图,再运行一次,然后在命令行里输入两次“ctrl+c”,再执行一次tensorboard的命令。然后在网址里刷新。此时刷新会发现前后两个图混在了一起。

    在Jupyter中点Kernel+Restart+run all,再次刷新图,以防止出现两个图混叠的情况。

    完整代码如下:

    TensorBoard生成的图如下:

    从图上可以看出代码的结构。

    三、TensorBoard网络运行(可视化参数)

    tf.summary.scalar('mean',mean)

    #这个方法是给mean这个变量命名为'mean'

    tf.summary.histogram('histogram',var) #直方图

    write.add_summary(summary,epoch)   # 写入summary和文件运行周期

    详细代码截图如下:(在Pycharm上可以跑,在Jupyter上有报错没有y-input,但是明明是有的...)

    出来的图在TensorBoard的Scalar标签栏下:

    点击Accuracy就可以看到图了:

    可以放大(图像下方),也可以进行Smoothing(界面左侧)。

    记录了Weight和biases的平均值,标准差,最小值,方差等随迭代次数的变化,并记录了loss随迭代次数的变化。

    weight和biases的值的变化情况 loss的变化情况

    loss随着迭代次数增加而震荡着降低。如果loss曲线震动得比较剧烈,可能因为学习率设置得太大了,导致模型没法收敛。

    点击网页上方的“distribution”按钮,可以看到直方图的分布。

    直方图分布是颜色越深,分布得越多。

    点击网页上方的“histogram”按钮,可以看到histogram的分布。

    四、TensorFlow可视化

    参考网站:https://www.tensorflow.org/guide/embedding

    用到的图片的下载链接:https://www.tensorflow.org/images/mnist_10k_sprite.png

    Shift+Tab组合键可以查看用到的方法的描述

    误:embedding = tf.Variable(tf.stack(mnist.test.images[:image_num],trainable=False,name='embedding'))

    #这句话报错是因为括号的位置。 trainable和name都是用来定义Variable而不是stack的。

    正:embedding = tf.Variable(tf.stack(mnist.test.images[:image_num]), trainable=False, name='embedding')

    代码如下:

    需要在当前文件夹下新建projector ->data:存放图片

                                                           ->projector

    这时候在projector下的projector文件里出现了很多新文件。

    同样按照之前的方法打开tensorboard,点击“projector”。

    点击Color并选择,可以给projector上色。

    点击T-SNE,可以看到收敛和聚类的过程。也可以改变学习率去看收敛过程。

    相关文章

      网友评论

          本文标题:第六天、手写数字识别改进+TensorBoard(TensorF

          本文链接:https://www.haomeiwen.com/subject/oxgkmftx.html