神经网络 权重可视化

原创 2018年04月17日 16:17:12
深度学习已经应用在各种不同的领域,并且都取得了不错的效果,但是在很多情况下,深度学习网络被我们看做一个黑匣子,我们不知道通过训练,我们的网络到底学习到了什么。今天给大家分享一个简单的权重可视化的方法,在我们训练完网络之后,可以通过权重可视化,直观的理解网络到底学习到了什么。本次实验基于MNIST数据集,通过建立一个两层的神经网络,采用softmax对数据集进行分类。训练完成之后,就可以看到网络的权重分布了。
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

import pylab
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
y_actual = tf.placeholder(tf.float32, shape=[None, 10])
W1 = tf.Variable(tf.random_normal([784,10]))        #初始化权值W
b1 = tf.Variable(tf.random_normal([10]))            #初始化偏置项b
layer1=tf.nn.sigmoid(tf.matmul(x,W1) + b1)
y_predict = tf.nn.softmax(layer1)     #加权变换并进行softmax回归,得到预测概率
regularizer=tf.contrib.layers.l2_regularizer(0.05) 
regloss=regularizer(W1)

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_actual*tf.log(y_predict),reduction_indices=1))   #损失函数为交叉熵
totalloss=cross_entropy+regloss
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(totalloss)   #用梯度下降法使得残差最小

correct_prediction = tf.equal(tf.argmax(y_predict,1), tf.argmax(y_actual,1))   #在测试阶段,测试准确度计算
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))                #多个批次的准确度均值

init = tf.initialize_all_variables()

with tf.Session() as sess:
    sess.run(init)
    
    for i in range(10000):               #训练阶段,迭代10000次
        batch_xs, batch_ys = mnist.train.next_batch(100)           #按批次训练,每批100行数据
        sess.run(train_step, feed_dict={x: batch_xs, y_actual: batch_ys})   #执行训练
        if(i%1000==0):                  #每训练1000次,测试一次
            print ("accuracy:",sess.run(accuracy, feed_dict={x: mnist.test.images, y_actual: mnist.test.labels}))

    W_1=W1.eval() # 把权重矩阵保存成array,array.shape=(784,10)  
    for i in range(10):  # 绘制10个隐层神经元与输入层神经元个之间的权重
        im=W_1[:,i].reshape(28,28)  #把矩阵的每一列 变化层 28*28 的矩阵
        plt.imshow(im)  #绘图
        plt.show()

结果图如下:

以上为10个节点的权重可视化结果,我们大概可以看出神经网络的权重已经学习到了对应数字的轮廓。

由于上述实验结果训练轮数比较少,当训练轮数增加时,权重可视化的效果会变得更加清晰。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39709476/article/details/79976078

机器学习之神经网络

本课程主要讲解神经元模型、权重、阈值、激活函数等定义,讲解感知机与多层网络,讲解误差逆传播算法,全局最小和局部最小的概念,讲解梯度寻优方法,过拟合问题,深度学习由来等知识点。
  • 2018年01月09日 03:13

可视化神经网络的一些方法

原文为http://cs231n.github.io/understanding-cnn/    可视化CNN学到的东西 有一些方法可以用来理解和可视化CNN, 作为对深度学习不可解释的论...
  • Layumi1993
  • Layumi1993
  • 2016-12-21 18:11:16
  • 892

TensorBoard数据可视化

Tensorboard可以将模型训练的过程中的各种汇总数据展示出来,包括标量(Scalars)、图片(image)、音频(Audio)、计算图(Graphs)、数据分布(Distributions)、...
  • u013381011
  • u013381011
  • 2017-12-27 15:47:18
  • 73

可视化Keras深度学习神经网络模型

原文链接:点击打开链接 摘要: 为了使开发者更好的理解其开发的神经网络模型,Keras Python深度学习库提供了可视化神经网络模型的工具。在本文中,作者通过一个小例子,详细的介绍可视化的...
  • qq_40954115
  • qq_40954115
  • 2017-12-14 15:08:29
  • 231

神经网络特征可视化

1. visualizing higher-layer features of a deep network 本文提出了两种可视化方法。  1. 最大化activation 当训练完一个...
  • xiaochaoqu
  • xiaochaoqu
  • 2015-07-09 22:04:31
  • 1650

【caffe-matlab】权重以及特征图的可视化

前言 移植了各种caffe,是时候进行下一步操作了,先拿可视化下手吧。大部分内容可能跟网上的方法不一样,大家看完我的博客最好去网上看看大牛们的博客,万一被我误导了,就罪过了o(╯□╰)o,开更.......
  • zb1165048017
  • zb1165048017
  • 2016-09-23 22:26:56
  • 11210

tensorflow中可视化工具tensorboard的使用

from __future__ import print_function import tensorflow as tf def add_layer(inputs, in_size, out_s...
  • lujiandong1
  • lujiandong1
  • 2016-11-18 19:41:48
  • 764

深度学习Caffe实战(16)MATLAB实现模型参数权重可视化

前面博客中介绍了怎么样利用MATLAB实现特征图的可视化,那一篇博客中介绍了一个对权重可视化的博客,本来不打算写这个博客了,但是我仔细看了那一篇博客,有点繁琐,所以我又整理了一下用MATLAB实现模型...
  • gybheroin
  • gybheroin
  • 2017-01-14 23:09:32
  • 2815

Caffe学习系列(16):各层权值参数可视化

转载自: Caffe学习系列(16):各层权值参数可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5103425.html 通过前面...
  • qq_26898461
  • qq_26898461
  • 2016-01-06 16:14:02
  • 4815

卷积神经网络可视化和理解

神经网络可视化
  • u012609509
  • u012609509
  • 2017-06-05 09:31:21
  • 1316
收藏助手
不良信息举报
您举报文章:神经网络 权重可视化
举报原因:
原因补充:

(最多只允许输入30个字)