添加一个 Batch Normalization 层 。
tf.contrib.layers.batch_norm (inputs, decay=0.999, updates_collections=tf.GraphKeys.UPDATE_OPS, is_training=True, data_format=DATA_FORMAT_NHWC)
可用作conv2d和fully_connected的归一化函数。
conv2d 的转置
tf.conv2d_transpose (value, filter, output_shape, strides, padding=’SAME’, data_format=’NHWC’, name=None)
# -*- coding: utf-8 -*-
import tensorflow as tf
def func(in_put, in_channel, out_channel):
weights = tf.get_variable(name="weights", shape=[2, 2, in_channel, out_channel],
initializer=tf.contrib.layers.xavier_initializer_conv2d())
convolution = tf.nn.conv2d(input=in_put, filter=weights, strides=[1, 1, 1, 1], padding='VALID')
conv_shape = convolution.get_shape().as_list()
deconv_shape = [conv_shape[0], conv_shape[1]*2, conv_shape[2]*2, conv_shape[3]]
deconvolution = tf.nn.conv2d_transpose(value=convolution, filter=weights, output_shape=deconv_shape, strides=[1, 2, 2, 1], padding='VALID')
return in_put, convolution, deconvolution
def main():
with tf.Graph().as_default():
input_x = tf.placeholder(dtype=tf.float32, shape=[1, 4, 4, 1])
in_put, convolution, deconvolution = func(input_x, 1, 1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
import numpy as np
_in_put, _convolution, _deconvolution = sess.run([in_put, convolution, deconvolution], feed_dict={input_x:np.random.uniform(low=0, high=255, size=[1, 4, 4, 1])})
print '\nin_put:'
print in_put
# print _in_put
print '\nconvolution:'
print convolution
# print _convolution
print '\ndeconvolution:'
print deconvolution
# print _deconvolution
if __name__ == "__main__":
main()
2017-09-29 09:51:41.472842: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1052] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
in_put:
Tensor("Placeholder:0", shape=(1, 4, 4, 1), dtype=float32)
convolution:
Tensor("Conv2D:0", shape=(1, 3, 3, 1), dtype=float32)
deconvolution:
Tensor("conv2d_transpose:0", shape=(1, 6, 6, 1), dtype=float32)
Process finished with exit code 0
tf.nn.dropout (x, keep_prob, noise_shape=None, seed=None, name=None)
# coding=utf-8
import tensorflow as tf
def main():
with tf.Graph().as_default():
import numpy as np
input_x = np.random.uniform(0, 255, [3, 3])
print input_x
drop = [0, 0, 0]
for i, keep_prob in enumerate([0.1, 0.5, 1.0]):
drop[i] = tf.nn.dropout(x=input_x, keep_prob=keep_prob)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for drop_i in drop:
_drop_i = sess.run(drop_i)
print '\n----------\n'
print _drop_i
if __name__ == "__main__":
main()
# 初始输入
[[ 16.46278229 253.27597997 246.33614039]
[ 130.45261984 227.85971767 142.72621045]
[ 173.23025953 165.99906514 180.13238617]]
2017-09-29 11:02:29.146976: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1052] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
----------
# keep_prob = 0.1
[[ 0. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0. 1801.3238617]]
----------
# keep_prob = 0.5
[[ 32.92556457 506.55195994 0. ]
[ 260.90523969 455.71943533 0. ]
[ 346.46051906 0. 360.26477234]]
----------
# keep_prob = 1.0
[[ 16.46278229 253.27597997 246.33614039]
[ 130.45261984 227.85971767 142.72621045]
[ 173.23025953 165.99906514 180.13238617]]
tf.contrib.layers.fully_connected (inputs, num_outputs, activation_fn=tf.nn.relu)
convolution
和 activation
。convolution
中,只对输入的最后一维求平均,且阶数不变。即 ‘weights:0’.shape=[inputs.shape[-1], num_outputs])。num_outputs
是 ‘weights:0’ 第二维(即第-1维
)的参数值;经过fn计算后,也变成了 结果输出的tensor 的最后一维(即第-1维
)的参数值。activation_fn=None
,则输出结果 不经过激活,依然可能包含负数值。# coding=utf-8
import tensorflow as tf
from tensorflow.contrib.layers import fully_connected
def main():
with tf.Graph().as_default():
import numpy as np
input_x = np.random.uniform(0, 10, [3, 3])
print input_x
fn = fully_connected(inputs=input_x, num_outputs=1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
_fn = sess.run(fn)
print _fn
print '\n----------\n'
for (x, y) in zip(tf.global_variables(), sess.run(tf.global_variables())):
print '\n', x, '\n', y
if __name__ == "__main__":
main()
# 原始输入矩阵
[[ 7.73305319 0.2780667 7.27101124]
[ 0.84666041 0.92980727 6.83676724]
[ 1.02844109 5.51824496 1.78840816]]
2017-09-29 11:33:02.500942: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1052] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
# fn后输出的结果tensor
[[ 2.32549239]
[ 1.69284669]
[ 0. ]]
----------
<tf.Variable 'fully_connected/weights:0' shape=(3, 1) dtype=float64_ref>
[[-0.01048241]
[-0.83954232]
[ 0.36308597]]
<tf.Variable 'fully_connected/biases:0' shape=(1,) dtype=float64_ref>
[ 0.]
Process finished with exit code 0
# coding=utf-8
import tensorflow as tf
from tensorflow.contrib.layers import fully_connected
def main():
with tf.Graph().as_default():
import numpy as np
input_x = np.random.uniform(0, 10, [2, 4, 4, 3])
print np.shape(input_x)
fn = fully_connected(inputs=input_x, num_outputs=1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
_fn = sess.run(fn)
print np.shape(_fn)
print '\n----------\n'
for i in tf.global_variables():
print '\n', i
if __name__ == "__main__":
main()
(2, 4, 4, 3)
2017-09-29 11:46:17.248114: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1052] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
# convolution 中,只对输入的最后一维求平均,且阶数不变。即 'weights:0'.shape=[inputs.shape[-1], num_outputs])。
(2, 4, 4, 1)
----------
<tf.Variable 'fully_connected/weights:0' shape=(3, 1) dtype=float64_ref>
<tf.Variable 'fully_connected/biases:0' shape=(1,) dtype=float64_ref>
max(features, 0)
tf.nn.relu(features, name=None)
min(max(features, 0), 6)。即对 tf.nn.relu
的优化,防止 relu过后 某些 极端值 依然 大于6
tf.nn.relu6(features, name=None)
计算公式: softmax = exp(logits) / reduce_sum(exp(logits), dim)
tf.nn.softmax (logits, dim=-1, name=None)
# coding=utf-8
import tensorflow as tf
import numpy as np
input_x = tf.constant(np.random.uniform(0, 5, [2, 3]))
softmax = tf.nn.softmax(logits=input_x)
# 自己写的softmax接口
def my_softmax(logits, dim=-1):
my_softmax = tf.div(tf.exp(logits), tf.reduce_sum(tf.exp(logits), dim, keep_dims=True))
return my_softmax
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
my_softmax = my_softmax(logits=input_x)
_input_x, _softmax, _my_softmax = sess.run([input_x, softmax, my_softmax])
print 'input:', np.shape(input_x), input_x, '\n', _input_x
print '\n----------\n'
print 'softmax:', np.shape(_softmax), softmax, '\n', _softmax
print '\n----------\n'
print 'my_softmax:', np.shape(_my_softmax), my_softmax, '\n', _my_softmax
print '\n----------\n'
for i in tf.global_variables():
print '\n', i
# softmax输入类型为tensor型
input: (2, 3) Tensor("Const:0", shape=(2, 3), dtype=float64)
[[ 3.88517858 3.69402461 3.07837121]
[ 1.27162028 2.12622856 4.34646188]]
----------
# softmax后,shape保持不变,返回tensor型
softmax: (2, 3) Tensor("Softmax:0", shape=(2, 3), dtype=float64)
[[ 0.44008545 0.36351295 0.1964016 ]
[ 0.04000495 0.09402978 0.86596527]]
----------
# 根据计算公式:softmax = exp(logits) / reduce_sum(exp(logits), dim) 得到了相同的接口输出
my_softmax: (2, 3) Tensor("div:0", shape=(2, 3), dtype=float64)
[[ 0.44008545 0.36351295 0.1964016 ]
[ 0.04000495 0.09402978 0.86596527]]
----------
# 内存中无参数保存
Process finished with exit code 0
tf.contrib.layers.l1_regularizer (scale, scope=None)
tf.contrib.layers.l2_regularizer (scale, scope=None)
执行“Xavier”初始化的初始化程序。
tf.contrib.layers.xavier_initializer (uniform=True, seed=None, dtype=tf.float32)
# coding=utf-8
import tensorflow as tf
xavier = tf.get_variable(name="weights",
shape=[2, 2],
initializer=tf.contrib.layers.xavier_initializer())
constant = tf.get_variable(name='biases',
shape=[2],
initializer=tf.constant_initializer())
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
_xavier, _constant = sess.run([xavier, constant])
print '\n\nxavier:'
print xavier
print _xavier
print '\n\nconstant:'
print constant
print _constant
xavier:
<tf.Variable 'weights:0' shape=(2, 2) dtype=float32_ref>
[[ 1.20015538 0.34742999]
[ 0.39075291 0.60076308]]
constant:
<tf.Variable 'biases:0' shape=(2,) dtype=float32_ref>
[ 0. 0.]
import tensorflow as tf
print '\n\ntf.contrib.layers.xavier_initializer_conv2d() :\n', tf.contrib.layers.xavier_initializer_conv2d()
print '\n\ntf.constant_initializer() :\n', tf.constant_initializer()
print '\n\ntf.global_variables_initializer() :\n', tf.global_variables_initializer()
tf.contrib.layers.xavier_initializer_conv2d() :
<function _initializer at 0x7fe5133da578>
tf.constant_initializer() :
<tensorflow.python.ops.init_ops.Constant object at 0x7fe528bbdfd0>
tf.global_variables_initializer() :
name: "init"
op: "NoOp"
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有