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

umm没错，确实很难听... 不过先别急着下结论，因为... 更难听的还在后头呢……

把梯度训练变成声音，边听音乐边炼丹

Christian S. Perone也是位吉他手

开源代码，自己动手试试吧！

```import pyaudio
import numpy as np
import wave

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms

class Net(nn.Module):
def __init__(self):
super(Net, self).__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 forward(self, x):
x = F.relu(self.conv1(x))
x = F.max_pool2d(x, 2, 2)
x = F.relu(self.conv2(x))
x = F.max_pool2d(x, 2, 2)
x = x.view(-1, 4*4*50)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return F.log_softmax(x, dim=1)

def open_stream(fs):
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=fs,
output=True)
return p, stream

def generate_tone(fs, freq, duration):
npsin = np.sin(2 * np.pi * np.arange(fs*duration) * freq / fs)
samples = npsin.astype(np.float32)
return 0.1 * samples

def train(model, device, train_loader, optimizer, epoch):
model.train()

fs = 44100
duration = 0.01
f = 200.0
p, stream = open_stream(fs)

frames = []

for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()

norms = []
for layer in model.ordered_layers:

tone = f + ((norm_grad.numpy()) * 100.0)
tone = tone.astype(np.float32)
samples = generate_tone(fs, tone, 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")

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):

if __name__ == "__main__":
run_main()
```

0 条评论

• 判菜系、调众囗、打分数，这一回，我们用大数据烧菜？

年前，文摘菌曾经扒下了全网所有“年夜饭”菜谱，找到了最有年味的一道菜的一文，对于菜谱数据分析产生了浓厚的兴趣，遂自己也写了个爬虫爬取了某美食网站的一些精选菜谱和...

• 百闻不如一码！手把手教你用Python搭一个Transformer

与基于RNN的方法相比，Transformer 不需要循环，主要是由Attention 机制组成，因而可以充分利用python的高效线性代数函数库，大量节省训练...

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

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

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

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

• python3小游戏(1)：吃苹果小游戏

(1).可以通过键盘的上下左右四个键来控制主人公小刘的位置（同是移动方向不同，小刘的姿势也不同）

• Linux学习_012_Centos 6.8 安装 Netcat

2、解压缩文件到指定目录（注意：要先创建 /opt/module/netcat/ 目录）

文件树是按层次结构排序的文件集合。例如，文件树可能表示一个目录树或 ZIP 文件的内容。它通过 FileTree 接口表示。FileTree 接口继承自 Fil...

• BAT面试题43：log(n)时间复杂度下求n次幂

https://blog.csdn.net/weixin_42292229/article/details/86742650

• Python 之异常处理

在Python中不同的异常可以用不同的类型（Python中统一了类与类型，类型即使类）去标识，不同的类对象标识不同的异常，一个异常标识一种错误。