Tensorflow如何打印神经网络权重参数

在Tensorflow中,神经网络的权重是一个variable,所以要打印出来只需要按下面的代码即可。最重要的就是sess.run()

import tensorflow as tf

weight = tf.Variable(tf.random_normal([1,2]))
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(weight))

但是如果使用的一个函数来添加隐藏层和输出层,权重的变量初始化在函数里面,就需要将权重作为结果返回。举个?:

下面建立一个神经网络,用add_layer()函数来添加隐藏层和输出层。我们可以看到最后会返回一个weights的list。

import numpy as np
import tensorflow as tf

ACTIVATION = tf.nn.relu
N_LAYERS = 3
N_HIDDEN_UNITS = 15

下面这个是一个种子函数,让每一次的运行结果都保持一致。 

def fix_seed(seed=1):
    # reproducibel
    np.random.seed(seed)
    tf.set_random_seed(seed)

 神经网络的结构函数,里面包含了添加隐藏层的函数add_player():

def built_net(xs, ys):
    def add_layer(inputs, in_size, out_size, activation_function=None):
        # weights and biases
        Weights = tf.Variable(tf.random_normal([in_size, out_size], mean=0., stddev=1.))
        biases = tf.Variable(tf.zeros([1, out_size])+0.1)
#         w = Weights.read_value()
        # fully connected product
        Wx_plus_b = tf.matmul(inputs, Weights)+biases
 
        # activation
        if activation_function is None:
            outputs = Wx_plus_b
        else:
            outputs = activation_function(Wx_plus_b)
            
        return outputs, Weights
    
    fix_seed(1)
    
    # record inputs for every layer
    layers_inputs = [xs]
    w_outs = []
    
    # build hidden layers
    for l_n in range(N_LAYERS):
        layer_input = layers_inputs[l_n]
        in_size = layers_inputs[l_n].get_shape()[1].value
        output, weights= add_layer(
            layer_input,
            in_size,
            N_HIDDEN_UNITS,
            ACTIVATION,
            norm,
        )
        layers_inputs.append(output)
        w_outs.append(weights)
    
    ##output layer 
    prediction, weights = add_layer(layers_inputs[-1], 15, 1,
                           activation_function=None)
    
    cost = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction), reduction_indices=[1]))
    train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)
    return [train_op, cost, layers_inputs, w_outs]

 建立要用的数据集

# make up data
fix_seed(1)
x_data = np.linspace(-7, 10, 2500)[:, np.newaxis]
np.random.shuffle(x_data)
noise = np.random.normal(0, 8, x_data.shape)
y_data = np.square(x_data) - 5 + noise

运行网络,并打印出weights变量 

xs = tf.placeholder(tf.float32, [None, 1])#[num_samples, num_features]
ys = tf.placeholder(tf.float32, [None, 1])

train_op, cost, layers_inputs, weights = built_net(xs, ys)

sess = tf.Session()

init = tf.global_variables_initializer()
sess.run(init)

for i in range(251):
    if i%50 == 0:
        print("------------")
        print(sess.run(weights))
    sess.run(train_op, feed_dict={xs:x_data[i*10:i*10+10], ys:y_data[i*10:i*10+10]})

参考连接:https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-13-BN/

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着深度学习的发展,卷积神经网络作为其要算法被广泛应用到计算机视觉、自然语言处理及语音处理等各个领域,并取得了比传统算法更为优秀的成绩。但是,卷积神经网络结构复杂,参数量和计算量巨大,使得很多算法必须在GPU上实现,导致卷积神经网络难以应用在资源不足且实时性要求很高的移动端。为了解决上述问题,文中提出通过同时优化卷积神经网络的结构和参数来对卷积神经网络进行压缩,以使网络模型尺寸变小。首先,根据对网络模型结果的影响程度来对进行剪枝,保证在去除网络结构冗余信息的冋时保留模型的要连接;然后通过量化感知( quanTIκaτion- awareτraining)对卷积神经网络的浮点型和激活值进行完全量化,将浮点运算转换成定点运算,在降低网络模型计算量的冋时减少网络模型的尺寸。文中选用 tensorflow深度学习框架,在 Ubuntu16.04操作系统中使用 Spyder编译器对所提算法进行验证实验结果表眀,该算法使结枃简单的 Lenet模型从l.64M压缩至θ.36M,压缩比达到η8%,准确率只下降了了0.016;使轻量级网络 Mobilenet模型从16.9M压缩至3.1M,压缩比达到81%,准确率下降0.03。实验数据说明,在对卷积神经网络剪枝与参数量化辶后,该算法可以做到在准确率损失较小的情况下,对模型进行冇α压缩,解决了卷积神经网络模型难以部署到移动端的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值