深度学习的loss变小梯度是否变小

loss变小梯度反而没有变小。

背景sigmoid(wx+b)的二分类实验,损失函数为平方损失。

实验一:直接训练发现loss减少导致梯度减少。看代码1:

实验二:在wx+b后加上BN层梯loss减少梯度减少。看代码2:

代码1:

from enum import auto
from scipy.io import loadmat
import numpy as np
import torch
import torch.utils.data as data_utils
from torch import nn
import torch.optim as optim
network=nn.Linear(1,1)
tr=torch.Tensor([[-10],[10]])
optimizer = optim.Adam(network.parameters(), lr=0.04)
w=nn.Sigmoid()
i=0
l1=0
while True:
#i=i+1
network.train()
#network1.eval()#
optimizer.zero_grad()
#l=w(network(tr))
l=w(network(tr))
#print(network1(network(tr)))
l=(l[0]-0)**2+(l[1]-1)**2
l.backward()
optimizer.step()
print(l)
if l10:
l1=l
if l1/l>10:
for name, parms in network.named_parameters():
print(‘–>name:’, name)
print(‘–>para:’, parms)
print(‘–>grad_requirs:’,parms.requires_grad)
print(‘–>grad_value:’,parms.grad)
print("
=“)
l1=l
代码2:
from enum import auto
from scipy.io import loadmat
import numpy as np
import torch
import torch.utils.data as data_utils
from torch import nn
import torch.optim as optim
network=nn.Linear(1,1)
network1=nn.BatchNorm1d(1)
tr=torch.Tensor([[-10],[10]])
optimizer=optim.Adam(network.parameters(), lr=0.04)
optimizer1=optim.Adam(network1.parameters(), lr=0.04)
w=nn.Sigmoid()
i=0
l1=0
while True:
#i=i+1
network.train()
network1.train()#
optimizer.zero_grad()
optimizer1.zero_grad()
#l=w(network(tr))
l=w(network(tr))
#print(network1(network(tr)))
l=(l[0]-0)**2+(l[1]-1)**2
l.backward()
optimizer.step()
optimizer1.step()
print(l)
if l10:
l1=l
if l1/l>10:
for name, parms in network.named_parameters():
print(‘–>name:’, name)
print(‘–>para:’, parms)
print(‘–>grad_requirs:’,parms.requires_grad)
print(‘–>grad_value:’,parms.grad)
print("
=”)
l1=l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值