(三)加入指数滑动平均算法

每个step,train_op之后,求滑动平均。

#定义三层卷积网络  ,假设输入的是shape(batchsize,128,128,3)的图片
def simplenet(inputs,y,class_num,istrain=True):
    with tf.variable_scope('conv1'):
        W_conv1 = weight_variable([5,5,3,32])
        b_conv1 = bias_variable([32]) #大小和输出通道数一致
        gamma_conv1 = tf.Variable(tf.constant(1.0,shape=[1]))
        theta_conv1 = tf.Variable(tf.constant(0.0,shape=[1]))
    net = conv2d(inputs,W_conv1) + b_conv1  #:大小:128-5+2*2/1+1=128 其实不用算,padding目的就是维持大小和输入一致
    net, _, _ = batch_norm(net,gamma_conv1,theta_conv1,istrain)
    net = tf.nn.relu(net)
    net = max_pool_2x2(net) # shape(batchsize,64,64,32)
    
    with tf.variable_scope('conv2'):
        W_conv2 = weight_variable([3,3,32,64])
        b_conv2 = bias_variable([64])
        gamma_conv2 = tf.Variable(tf.constant(1.0,shape=[1]))
        theta_conv2 = tf.Variable(tf.constant(0.0,shape=[1]))
    net = conv2d(net,W_conv2) + b_conv2 
    net, _, _ = batch_norm(net,gamma_conv2,theta_conv2,istrain)
    net = tf.nn.relu(net)
    net = max_pool_2x2(net) # shape(batchsize,32,32,64)
    
    with tf.variable_scope('conv3'):
        W_conv3 = weight_variable([3,3,64,128])
        b_conv3 = bias_variable([128])
        gamma_conv3 = tf.Variable(tf.constant(1.0,shape=[1]))
        theta_conv3 = tf.Variable(tf.constant(0.0,shape=[1]))
    net = conv2d(net,W_conv3) + b_conv3 
    net, _, _ = batch_norm(net,gamma_conv3,theta_conv3,istrain)
    net = tf.nn.relu(net)
    net = max_pool_2x2(net) # shape(batchsize,16,16,128)
    
    net_flat = tf.reshape(net,[batchsize,16*16*128])
    with tf.variable_scope('fc'):
        W_fc1 = weight_variable([16*16*128,class_num])
        b_fc1 = bias_variable([class_num])
    logits = tf.nn.relu(tf.matmul(net_flat,W_fc1) + b_fc1) # shape(batchsize,class_num)
    
    cross_loss = loss(y,logits)
    train_op = optimizer1(cross_loss,lr)
    ema = tf.train.ExponentialMovingAverage(decay=0.9999) ###  变
    with tf.control_dependencies([train_op]):             ###  化
        maintain_averages_op = ema.apply()                ###  部
        shadow_W_conv1 = ema.average(W_conv1)             ###  分
        
    return logits, train_op, cross_loss, maintain_averages_op, shadow_W_conv1


logits, train_op, loss, maintain_averages_op, shadow_W_conv1 = simplenet(x,y,class_num)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    steps = epochs * len(img_data) // batchsize
    for step in range(steps):
        batch_inputs = inputs[step*batchsize:(step+1)*batchsize]
        batch_labels = true_labels[step*batchsize:(step+1)*batchsize]
        ls, tr, s = sess.run([loss,maintain_averages_op,shadow_W_conv1],feed_dict={x:batch_inputs,y:batch_labels})
        if step%100 == 0:
            print(step,' step: ',' loss is ', ls, s) # ls 损失,s,W_conv1对应的滑动平均值
            

运行:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
滑动平均算法是一种对据进行处理的方,可以用于降低噪声或抽取据的趋势。在MATLAB中,可以使用以下代码实现滑动平均滤波算法: ```matlab function x1 = MovingAverageFilter(x, win_sz) % x: 待滑动平均据 % win_sz: 窗宽 if nargin < 2 % 默认窗宽为7 win_sz = 7; end L = length(x); % 据长度 x1 = zeros(L, 1); % 后的据 half_win = ceil(win_sz/2); half_win_ = floor(win_sz/2); if half_win == half_win_ half_win = half_win + 1; end x1(1:half_win) = x(1:half_win); x1(L-half_win:L) = x(L-half_win:L); for i = half_win:L-half_win k = 0; for j = i-half_win_ : i+half_win_ % 对第i个窗口里面的 k = k + 1; temp(k) = x(j); % 临时存储第i个窗口的据 end x1(i) = mean(temp); % 第i个窗口里面的值给第i个 end end ``` 这段MATLAB代码实现了滑动平均滤波算法,其中`x`是待滑动平均据,`win_sz`是窗口宽度。函会首先根据窗口宽度对边缘据进行保留,然后对每个窗口内的据进行,并将值赋给对应的据点。最后返回后的据`x1`。 你可以通过调用这个函来使用滑动平均滤波算法据进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [M-point moving-average(M点滑动平均)Matlab 实现](https://blog.csdn.net/qq_52309640/article/details/120476695)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [滑动平均滤波matlab程序](https://download.csdn.net/download/weixin_38739225/12195389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [滑动平均滤波算法——MATLAB实现](https://blog.csdn.net/baidu_38963740/article/details/111705114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值