TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: TF之BN:BN算法对多层中的每层神经网络加快学习QuadraticFunction_InputData+Histogram+BN的Error_curve

输出结果

image.png


代码设计


# 23 Batch Normalization

import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

ACTIVATION = tf.nn.tanh

N_LAYERS = 7          

N_HIDDEN_UNITS = 30  

def fix_seed(seed=1):

   # reproducible

   np.random.seed(seed)

   tf.set_random_seed(seed)

def plot_his(inputs, inputs_norm):

   # plot histogram for the inputs of every layer

 

   for j, all_inputs in enumerate([inputs, inputs_norm]):

       for i, input in enumerate(all_inputs):

           plt.subplot(2, len(all_inputs), j*len(all_inputs)+(i+1))

           plt.cla()

           if i == 0:

               the_range = (-7, 10)

           else:

               the_range = (-1, 1)

           plt.hist(input.ravel(), bins=15, range=the_range, color='#0000FF')

           plt.yticks(())

           if j == 1:

               plt.xticks(the_range)

           else:

               plt.xticks(())

           ax = plt.gca()

           ax.spines['right'].set_color('none')

           ax.spines['top'].set_color('none')

       plt.title("%s normalizing" % ("Without" if j == 0 else "With"))

   plt.title('Matplotlib,BN,histogram--Jason Niu')

   plt.draw()

   plt.pause(0.001)

def built_net(xs, ys, norm):

   def add_layer(inputs, in_size, out_size, activation_function=None, norm=False):

       # weights and biases (bad initialization for this case)

       Weights = tf.Variable(tf.random_normal([in_size, out_size], mean=0., stddev=1.))

       biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)

       # fully connected product

       Wx_plus_b = tf.matmul(inputs, Weights) + biases

       # normalize fully connected product

       if norm:

           # Batch Normalize

           fc_mean, fc_var = tf.nn.moments(

               Wx_plus_b,

               axes=[0],  

                         

           )

           scale = tf.Variable(tf.ones([out_size]))

           shift = tf.Variable(tf.zeros([out_size]))

           epsilon = 0.001

           # apply moving average for mean and var when train on batch

           ema = tf.train.ExponentialMovingAverage(decay=0.5)

           def mean_var_with_update():

               ema_apply_op = ema.apply([fc_mean, fc_var])

               with tf.control_dependencies([ema_apply_op]):

                   return tf.identity(fc_mean), tf.identity(fc_var)

           mean, var = mean_var_with_update()

           Wx_plus_b = tf.nn.batch_normalization(Wx_plus_b, mean, var, shift, scale, epsilon)

         

           # Wx_plus_b = (Wx_plus_b - fc_mean) / tf.sqrt(fc_var + 0.001)  #进行BN一下

           # Wx_plus_b = Wx_plus_b * scale + shift

 

       # activation

       if activation_function is None:

           outputs = Wx_plus_b

       else:

           outputs = activation_function(Wx_plus_b)

       return outputs  #输出激活结果

   fix_seed(1)

   if norm:

       # BN for the first input

       fc_mean, fc_var = tf.nn.moments(

           xs,

           axes=[0],

       )

       scale = tf.Variable(tf.ones([1]))

       shift = tf.Variable(tf.zeros([1]))

       epsilon = 0.001

       # apply moving average for mean and var when train on batch

       ema = tf.train.ExponentialMovingAverage(decay=0.5)

       def mean_var_with_update():

           ema_apply_op = ema.apply([fc_mean, fc_var])

           with tf.control_dependencies([ema_apply_op]):

               return tf.identity(fc_mean), tf.identity(fc_var)

       mean, var = mean_var_with_update()

       xs = tf.nn.batch_normalization(xs, mean, var, shift, scale, epsilon)

   # record inputs for every layer

   layers_inputs = [xs]

   # 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 = add_layer(

           layer_input,    # input

           in_size,        # input size

           N_HIDDEN_UNITS, # output size

           ACTIVATION,     # activation function

           norm,           # normalize before activation

       )

       layers_inputs.append(output)  

   # build output layer

   prediction = add_layer(layers_inputs[-1], 30, 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]

fix_seed(1)

x_data = np.linspace(-7, 10, 2500)[:, np.newaxis]  #水平轴-7~10

np.random.shuffle(x_data)

noise = np.random.normal(0, 8, x_data.shape)

y_data = np.square(x_data) - 5 + noise

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

ys = tf.placeholder(tf.float32, [None, 1])

#建立两个神经网络作对比

train_op, cost, layers_inputs = built_net(xs, ys, norm=False)

train_op_norm, cost_norm, layers_inputs_norm = built_net(xs, ys, norm=True)

sess = tf.Session()

if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:

   init = tf.initialize_all_variables()

else:

   init = tf.global_variables_initializer()

sess.run(init)

# record cost

cost_his = []      

cost_his_norm = []  

record_step = 5    

plt.ion()

plt.figure(figsize=(7, 3))

for i in range(250):

   if i % 50 == 0:

       # plot histogram

       all_inputs, all_inputs_norm = sess.run([layers_inputs, layers_inputs_norm], feed_dict={xs: x_data, ys: y_data})

       plot_his(all_inputs, all_inputs_norm)

   # train on batch每一步都run一下

   sess.run([train_op, train_op_norm], feed_dict={xs: x_data[i*10:i*10+10], ys: y_data[i*10:i*10+10]})

   if i % record_step == 0:

       # record cost

       cost_his.append(sess.run(cost, feed_dict={xs: x_data, ys: y_data}))

       cost_his_norm.append(sess.run(cost_norm, feed_dict={xs: x_data, ys: y_data}))

#以下是绘制误差值Cost误差曲线的方法

plt.ioff()

plt.figure()

plt.title('Matplotlib,BN,Error_curve--Jason Niu')

plt.plot(np.arange(len(cost_his))*record_step, np.array(cost_his), label='no BN')     # no norm

plt.plot(np.arange(len(cost_his))*record_step, np.array(cost_his_norm), label='BN')   # norm

plt.legend()

plt.show()


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
21 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
17天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
17天前
|
安全 网络协议 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-1):主动信息收集之ping、Nmap 就怕你学成黑客啦!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-1):主动信息收集之ping、Nmap 就怕你学成黑客啦!
|
17天前
|
网络协议 安全 NoSQL
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-2):scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练、就怕你学成黑客啦!
scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(8-2):scapy 定制 ARP 协议 、使用 nmap 进行僵尸扫描-实战演练、就怕你学成黑客啦!
|
17天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
20天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
65 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
22天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
1月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
55 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练

热门文章

最新文章