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

神经网络的训练通常是通过测量许多不同的指标来完成的,如精度、损耗、梯度等。这是大部分时间聚集这些指标并在张力板上绘制可视化效果。

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

在这个实验中,我做了一个非常简单的例子,展示了一个综合声音,亚洲金博宝它是使用每一层的梯度范数,以及使用不同的设置(如不同的学习率、优化器、动量等)在MNIST上进行卷积神经网络训练的步骤。

你需要安装PyAudio公司火把运行代码(在这篇文章的结尾).

使用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,音,duration) frames.append(samples) silence = np.zeros(samples.shape[0] * 2, dtype=np.float32) frames.append(silence) optimizer.step() # Just 200 steps per epoach if batch_idx == 200: break 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(b''.join(frames)) wf.close() stream.stop_stream() stream.close() p.terminate() def run_main(): device = torch.device("cpu") train_loader = torch.utils.data.DataLoader( datasets.MNIST('../data', train=True, download=True, transform=transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ])), batch_size=256, shuffle=True) model = Net().to(device) optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) for epoch in range(1, 2): train(model, device, train_loader, optimizer, epoch) if __name__ == "__main__": run_main()
引用本文为:基督教S. Perone,“训练时听神经网络梯度规范,”在亚洲金博宝隐姓埋名地2019年8月4日,//www.cpetem.com/2019/08/listening-to-the-neural-network-gradient-norms-during-training(在训练期间)/.

对“训练中听神经网络梯度规范”的9点思考

  1. 这是个好主意,基督徒!我们的听觉对纹理和颜色(波形和频率平衡)最敏感,所以也许这是一个有趣的探索方向。我一定要试试这个!

  2. 大文章基督徒,

    即使是艰难的,我不是一个数据科学家,你的方式,甚至是新手可以理解写的文章。

发表评论

您的电子邮件地址将不会被发布。

这个网站使用Akismet来减少垃圾邮件。了解您的意见如何处理数据.