用于测试tensorflow网络结构的代码

分享一段可以用于测试tensorflow网络结构的代码;

通常我们在修改网络结构的时候,例如改变网络层数、输入输出尺寸,都需要去探索网络的结构是如何的,以及修改完以后能不能正常使用网络,那么就需要网络的测试代码来对于原有网络中的结构进行一点一点的测试以及修改尝试;

基本的神经网络单元包括有输入尺寸、定义卷积核、定义激活函数、定义卷积层、定义padding以及输出的尺寸,也可能涉及标准化等操作,可以如下面的代码所示,对于这些内容进行修改,并且可以将自己网络中的结构替换过来,以进行网络结构的测试;

import os
import sys
import tensorflow as tf
import numpy as np

FLAGS = tf.app.flags.FLAGS
BN_EPSILON = 0.001

def create_variables(name, shape, initializer=tf.contrib.layers.xavier_initializer(), is_fc_layer=False):  # 定义变量
    '''
    :param name: A string. The name of the new variable
    :param shape: A list of dimensions
    :param initializer: User Xavier as default.
    :param is_fc_layer: Want to create fc layer variable? May use different weight_decay for fc
    layers.
    :return: The created variable
    '''

    ## TODO: to allow different weight decay to fully connected layer and conv layer
    regularizer = tf.contrib.layers.l2_regularizer(scale=0.0001)

    new_variables = tf.get_variable(name, shape=shape, initializer=initializer,
                                    regularizer=regularizer)
    return new_variables

def batch_normalization_layer(input_layer, dimension):  # 进行批标准化,每一层在输入到神经元之前先输入到BN层中
    '''
    Helper function to do batch normalziation
    :param input_layer: 4D tensor
    :param dimension: input_layer.get_shape().as_list()[-1]. The depth of the 4D tensor
    :return: the 4D tensor after being normalized
    '''
    mean, variance = tf.nn.moments(input_layer, axes=[0, 1, 2])
    beta = tf.get_variable('beta', dimension, tf.float32,
                           initializer=tf.constant_initializer(0.0, tf.float32))
    gamma = tf.get_variable('gamma', dimension, tf.float32,
                            initializer=tf.constant_initializer(1.0, tf.float32))
    bn_layer = tf.nn.batch_normalization(input_layer, mean, variance, beta, gamma, BN_EPSILON)
    return bn_layer

input = tf.Variable(tf.random_normal([128,224,224,16]))
filter = tf.Variable(tf.random_normal([3,3,16,16]))
op1 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')

in_channel = op1.get_shape().as_list()[-1]
bn_layer = batch_normalization_layer(op1, in_channel)
relu_layer = tf.nn.relu(bn_layer)
filter = create_variables(name='conv', shape=[3,3,16,16])
conv_layer = tf.nn.conv2d(relu_layer, filter, strides=[1, 1, 1, 1], padding='SAME')
padded_input = op1
output = conv_layer + padded_input

init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    print('*' * 20 + ' op1 ' + '*' * 20)
    result=sess.run(output)
    print(result.shape)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值