# 亲耳“听见”神经网络的声音：梯度变化一听即可辨别(附代码)

##### 【新智元导读】训练神经网络可以用听的！Reddit网友做了一个非常有趣的实验：将每个神经网络层梯度范式转换成了一个音调，这样人类就可以凭借听觉，来很好的分辨出非常小的干扰，比如节奏和音调。

MLApprentice

klaysDoodle

10层网络以后，我聋了

MLApprentice

gohu_cd

“听见”神经网络的声音

```  1import pyaudio
2import numpy as np
3import wave
4
5import torch
6import torch.nn as nn
7import torch.nn.functional as F
8import torch.optim as optim
9from torchvision import datasets, transforms
10
11
12class Net(nn.Module):
13    def __init__(self):
14        super(Net, self).__init__()
15        self.conv1 = nn.Conv2d(1, 20, 5, 1)
16        self.conv2 = nn.Conv2d(20, 50, 5, 1)
17        self.fc1 = nn.Linear(4*4*50, 500)
18        self.fc2 = nn.Linear(500, 10)
19
20        self.ordered_layers = [self.conv1,
21                               self.conv2,
22                               self.fc1,
23                               self.fc2]
24
25    def forward(self, x):
26        x = F.relu(self.conv1(x))
27        x = F.max_pool2d(x, 2, 2)
28        x = F.relu(self.conv2(x))
29        x = F.max_pool2d(x, 2, 2)
30        x = x.view(-1, 4*4*50)
31        x = F.relu(self.fc1(x))
32        x = self.fc2(x)
33        return F.log_softmax(x, dim=1)
34
35
36def open_stream(fs):
37    p = pyaudio.PyAudio()
38    stream = p.open(format=pyaudio.paFloat32,
39                    channels=1,
40                    rate=fs,
41                    output=True)
42    return p, stream
43
44
45def generate_tone(fs, freq, duration):
46    npsin = np.sin(2 * np.pi * np.arange(fs*duration) * freq / fs)
47    samples = npsin.astype(np.float32)
48    return 0.1 * samples
49
50
51def train(model, device, train_loader, optimizer, epoch):
52    model.train()
53
54    fs = 44100
55    duration = 0.01
56    f = 200.0
57    p, stream = open_stream(fs)
58
59    frames = []
60
61    for batch_idx, (data, target) in enumerate(train_loader):
62        data, target = data.to(device), target.to(device)
64        output = model(data)
65        loss = F.nll_loss(output, target)
66        loss.backward()
67
68        norms = []
69        for layer in model.ordered_layers:
72
73            tone = f + ((norm_grad.numpy()) * 100.0)
74            tone = tone.astype(np.float32)
75            samples = generate_tone(fs, tone, duration)
76
77            frames.append(samples)
78
79        silence = np.zeros(samples.shape[0] * 2,
80                           dtype=np.float32)
81        frames.append(silence)
82
83        optimizer.step()
84
85        # Just 200 steps per epoach
86        if batch_idx == 200:
87            break
88
89    wf = wave.open("sgd_lr_1_0_bs256.wav", 'wb')
90    wf.setnchannels(1)
91    wf.setsampwidth(p.get_sample_size(pyaudio.paFloat32))
92    wf.setframerate(fs)
93    wf.writeframes(b''.join(frames))
94    wf.close()
95
96    stream.stop_stream()
97    stream.close()
98    p.terminate()
99
100
101def run_main():
102    device = torch.device("cpu")
103
106                       transform=transforms.Compose([
107                           transforms.ToTensor(),
108                           transforms.Normalize((0.1307,), (0.3081,))
109                       ])),
110        batch_size=256, shuffle=True)
111
112    model = Net().to(device)
113    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)
114
115    for epoch in range(1, 2):
116        train(model, device, train_loader, optimizer, epoch)
117
118
119if __name__ == "__main__":
120    run_main()```

Reddit地址：

0 条评论

### 相关文章

3D数据对于自动驾驶汽车，自动驾驶机器人，虚拟现实和增强现实至关重要。与以像素阵列表示的2D图像不同，它可以表示为多边形网格，体积像素网格，点云等。

• ### 使用PyTorch进行表格数据的深度学习

使用表格数据进行深度学习的最简单方法是通过fast-ai库，它可以提供非常好的结果，但是对于试图了解幕后实际情况的人来说，它可能有点抽象。因此在本文中，介绍了如...

• ### 如何构建PyTorch项目

自从开始训练深度神经网络以来，一直在想所有Python代码的结构是什么。理想情况下，良好的结构应支持对该模型进行广泛的试验，允许在一个紧凑的框架中实现各种不同的...

• ### 亲耳“听见”神经网络的声音：梯度变化一听即可辨别(附代码)

网友做了一个非常有趣的实验：将每个神经网络层梯度范式转换成了一个音调，这样人类就可以凭借听觉，来很好的分辨出非常小的干扰，比如节奏和音调。

• ### 听，是梯度的声音！用听觉监控神经网络训练，边听音乐边炼丹

训练神经网络是个极为枯燥的工作。与其盯着Learning Curves发呆，或许可以调动一下其他感官，一起做点更有意思的事情。

• ### 基于Django的电子商务网站开发（连载25）

购物车模块包括“购物车中所有商品的显示”“添加商品进入购物车”“删除购物车中某种商品”“删除购物车中所有的商品”和“修改购物车中某种商品的数量”。

• ### [Python]通过有道词典API获取单词发音MP3

原文链接：https://blog.csdn.net/humanking7/article/details/88630856

• ### (23) 枚举的本质 / 计算机程序的思维逻辑

前面系列，我们介绍了Java中表示和操作数据的基本数据类型、类和接口，本节探讨Java中的枚举类型。 所谓枚举，是一种特殊的数据，它的取值是有限的，可以枚举出来...

• ### Java魔法堂：打包知识点之META-INF/MAINFEST.MF

一、前言　　　　　　　　　　　　　　　　　　　　　　　　　　 　　　　　　　　     通过执行形如 jar -cvf src.jar src 命令将多个....