听培训期间的神经网络梯度规范

训练神经网络往往是通过测量许多不同的指标,如准确性,损失,渐变等做了这是大多数做了汇总这些指标和TensorBoard绘制可视化的时间。

有,但是,其他的感觉,我们可以用它来监控神经网络,如培训声音。声音是一种目前在神经网络的训练探索很差的观点之一。亚洲金博宝人类听觉能很好的在一个等特点,节奏和音调区亚洲金博宝别非常小的扰动,即使这些扰动很短的时间或微妙。

对于这个实验,我做出示出利用各层的和用于使用不同的设置,如不亚洲金博宝同的学习率,优化器,动量上MNIST卷积神经网络训练的训练步骤中的梯度范数由合成声音一个非常简单的例子等等。

你需要安装PyAudioPyTorch以运行该代码(在这个帖子的结尾)。

使用LR 0.01 SGD培训声

这个段表示在第一个200步所述第一时期与来自4层梯度的训练会话,并使用10的更高的间距的批量大小,较高的一个层的规范,有一个短暂的沉默,以指示不同批次。注意梯度时间内增加。

使用LR 0.1 SGD培训声

同上,但具有较高的学习率。

使用LR 1.0 SGD培训声

与上述相同,但较高的学习速度,使网络发散,讲究高音时的规范爆炸,然后发散。

使用LR 1.0和BS 256新元培训声

相同的设置,但与1.0的较高的学习率和256注梯度如何爆炸和批量大小,然后有导致最终的声音提示NaN。

使用LR 0.01亚当培训声

这是在相同的设置作为SGD用亚当。

源代码

对于那些有兴趣谁,这里是我用来做声音剪辑的完整的源代码:

进口pyaudio进口numpy的作为NP进口波进口炬进口torch.nn如NN进口torch.nn.functional为F进口torch.optim从torchvision进口数据集,变换类净(nn.Module)的Optim:DEF __init __(个体):超级(净,自我).__ INIT __()self.conv1 = nn.Conv2d(1,20,5,1)= self.conv2 nn.Conv2d(20,50,5,1)= self.fc1 nn.Linear(4 * 4 * 50,500)self.fc2 = nn.Linear(500,10)self.ordered_layers = [self.conv1,self.conv2,self.fc1,self.fc2] DEF向前(个体,X):X= F.relu(self.conv1(X))×= F.max_pool2d(X,2,2)X = F.relu(self.conv2(X))×= F.max_pool2d(X,2,2)X= x.view(-1,4 * 4 * 50)X = F.relu(self.fc1(X))×= self.fc2(x)的返回F.log_softmax(X,暗淡= 1)DEF open_stream(FS):p = pyaudio.PyAudio()流= p.open(格式= pyaudio.paFloat32,频道= 1,速率= FS,输出= TRUE)返回p,流DEF generate_tone(FS,频率,持续时间):npsin = NP.sin(2 * * np.pi np.arange(FS *持续时间)*频率/ fs)的样品= npsin.astype(np.float32)返回0.1 *样品DEF培养(型号,设备,叔rain_loader,优化器,历元):model.train()FS = 44100持续时间= 0.01 F = 200.0 P,流= open_stream(FS)帧= []为batch_idx,(在枚举数据,目标)(train_loader):数据,目标= data.to(装置),target.to(装置)optimizer.zero_grad()输出=模型(数据)损耗= F.nll_loss(输出目标)loss.backward()规范= []用于model.ordered_layers层:norm_grad = layer.weight.grad.norm()norms.append(norm_grad)音调= F +((norm_grad.numpy())* 100.0)音调= tone.astype(np.float32)样品= generate_tone(FS,音持续时间)frames.append(样品)沉默= np.zeros(samples.shape [0] * 2,D型细胞= np.float32)frames.append(沉默)optimizer.step()#每epoach仅有200步骤,如果batch_idx == 200:断裂WF = wave.open( “sgd_lr_1_0_bs256.wav”, 'WB')wf.setnchannels(1)wf.setsampwidth(p.get_sample_size(pyaudio.paFloat32))wf.setframerate(FS)wf.writeframes(二''。加入(帧))wf.close()stream.stop_stream()stream.close()p.terminate()DEF run_main():设备= torch.device( “CPU”)train_loader = torch.utils.data.DataLoader(datasets.MNIST( '../数据',火车=真,下载=真,变换= transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307),(0.3081,))])),=的batch_size 256,洗牌=真)模型=净()。到(装置)优化= optim.SGD(model.parameters(),LR = 0.01,动量= 0.5),用于历元 in range(1, 2): train(model, device, train_loader, optimizer, epoch) if __name__ == "__main__": run_main()
引用本文为:基督教S. Perone,“训练时听神经网络梯度规范,”在亚洲金博宝未知领域,2019年4月8日,//www.cpetem.com/2019/08/listening-to-the-neural-network-gradient-norms-during-training/