轮回过客 发表于 2022-5-3 16:24

深度网络训练过程的可视化问题

本帖最后由 轮回过客 于 2022-5-3 16:28 编辑

各位大大好,我现在在学习用hiddenlayer可视化神经网络的训练过程(辛苦各位大大了,您指出哪里错了,给您发一个1000吾爱币的悬赏可以吗?)
现在的问题是跟着这个专栏做出来的图像是这样的(专栏地址https://zhuanlan.zhihu.com/p/220403674)
https://tuchuangs.com/imgs/2022/05/03/477c456c47a588f3.png
报错是这样的https://tuchuangs.com/imgs/2022/05/03/fef8b6927321523e.png
但正常的出来的图像应该是这样的
https://tuchuangs.com/imgs/2022/05/03/0667ab5f4f82c1ed.png
下面那个绿色的东西是什么?
辛苦大佬解答一下了
下面是源码
import hiddenlayer as hl
import time

# 记录训练过程的指标
history = hl.History()
# 使用canvas进行可视化
canvas = hl.Canvas()

# 获取优化器和损失函数
optimizer = torch.optim.Adam(MyConvNet.parameters(), lr=3e-4)
loss_func = nn.CrossEntropyLoss()
log_step_interval = 100      # 记录的步数间隔

for epoch in range(5):
   print("epoch:", epoch)
   # 每一轮都遍历一遍数据加载器
   for step, (x, y) in enumerate(train_loader):
         # 前向计算->计算损失函数->(从损失函数)反向传播->更新网络
         predict = MyConvNet(x)
         loss = loss_func(predict, y)
         optimizer.zero_grad()   # 清空梯度(可以不写)
         loss.backward()   # 反向传播计算梯度
         optimizer.step()    # 更新网络
         global_iter_num = epoch * len(train_loader) + step + 1# 计算当前是从训练开始时的第几步(全局迭代次数)
         if global_iter_num % log_step_interval == 0:
             # 控制台输出一下
             print("global_step:{}, loss:{:.2}".format(global_iter_num, loss.item()))
             # 在测试集上预测并计算正确率
             test_predict = MyConvNet(test_data_x)
             _, predict_idx = torch.max(test_predict, 1)# 计算softmax后的最大值的索引,即预测结果
             acc = accuracy_score(test_data_y, predict_idx)

             # 以epoch和step为索引,创建日志字典
             history.log((epoch, step),
                         train_loss=loss,
                         test_acc=acc,
                         hidden_weight=MyConvNet.fc.weight)

             # 可视化
             with canvas:
               canvas.draw_plot(history["train_loss"])
               canvas.draw_plot(history["test_acc"])
               canvas.draw_image(history["hidden_weight"])

轮回过客 发表于 2022-5-3 16:34

本帖最后由 轮回过客 于 2022-5-3 16:37 编辑

{:301_999:}{:301_999:}有没有学习过深度神经网络这方面的大佬啊{:301_999:},现在的主要问题就是为什么我做出来的显示只有一个绿色的块,并且专栏当做说的控制台是怎么控制hiddenlayer显示不同时刻的训练状态的,这些都不太清楚

云在天 发表于 2022-5-3 16:39

先确定你的网络真的建立好了吗?损失函数计算是否有问题

云在天 发表于 2022-5-3 16:42

顺带一提,可视化用visualizer不更好一点吗?

轮回过客 发表于 2022-5-3 16:56

云在天 发表于 2022-5-3 16:42
顺带一提,可视化用visualizer不更好一点吗?

网络确定都建立好了,之前的网络结构可视化都做出来了,就是这块用hiddenlayer显示训练过程可视化时候的结果出了问题
老师是只让用hiddenlayer进行训练过程的可视化,
损失函数的计算不是
optimizer = torch.optim.Adam(MyConvNet.parameters(), lr=3e-4)
loss_func = nn.CrossEntropyLoss()
这两行吗?还是说这两行要改一下呢?
感谢大佬回复

云在天 发表于 2022-5-3 17:22

轮回过客 发表于 2022-5-3 16:56
网络确定都建立好了,之前的网络结构可视化都做出来了,就是这块用hiddenlayer显示训练过程可视化时候的 ...

你最好输出一下loss和accurate的值

sam喵喵 发表于 2022-5-3 18:08

看源码文件名估计原作者使用matplotlib后端做的
解决方案也比较简单,在Pycharm中禁用Python科学绘图窗口(然后它将使用默认的matplotlib后端)就可以(ctrl+V)

File > Settings > Tools > Python > show plots in tool window

轮回过客 发表于 2022-5-3 19:58

云在天 发表于 2022-5-3 17:22
你最好输出一下loss和accurate的值

额,还是不太懂,您可以说的具体一点吗,怎么更改这两个的值呢?这块相关的知识没找见

轮回过客 发表于 2022-5-3 20:13

本帖最后由 轮回过客 于 2022-5-3 20:15 编辑

sam喵喵 发表于 2022-5-3 18:08
看源码文件名估计原作者使用matplotlib后端做的
解决方案也比较简单,在Pycharm中禁用Python科学绘图窗口 ...
额,大佬按您说的出来图像了,怎么暂停截图呢?还有程序上还有一些问题,下面的acc=acc_uracyscore这里不知道怎么定义
https://static01.imgkr.com/temp/40fb1b9d507d4f42a239b14adced72b6.PNG
这个acc=acc_uracyscore前后文联系不起来,看不太懂什么意思
https://imgtu.com/i/OAmZ9I

焚心的小丑 发表于 2022-5-3 20:43

略懂,帮你看看
页: [1] 2 3
查看完整版本: 深度网络训练过程的可视化问题