深度网络训练过程的可视化问题
本帖最后由 轮回过客 于 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:37 编辑
{:301_999:}{:301_999:}有没有学习过深度神经网络这方面的大佬啊{:301_999:},现在的主要问题就是为什么我做出来的显示只有一个绿色的块,并且专栏当做说的控制台是怎么控制hiddenlayer显示不同时刻的训练状态的,这些都不太清楚 先确定你的网络真的建立好了吗?损失函数计算是否有问题 顺带一提,可视化用visualizer不更好一点吗? 云在天 发表于 2022-5-3 16:42
顺带一提,可视化用visualizer不更好一点吗?
网络确定都建立好了,之前的网络结构可视化都做出来了,就是这块用hiddenlayer显示训练过程可视化时候的结果出了问题
老师是只让用hiddenlayer进行训练过程的可视化,
损失函数的计算不是
optimizer = torch.optim.Adam(MyConvNet.parameters(), lr=3e-4)
loss_func = nn.CrossEntropyLoss()
这两行吗?还是说这两行要改一下呢?
感谢大佬回复 轮回过客 发表于 2022-5-3 16:56
网络确定都建立好了,之前的网络结构可视化都做出来了,就是这块用hiddenlayer显示训练过程可视化时候的 ...
你最好输出一下loss和accurate的值 看源码文件名估计原作者使用matplotlib后端做的
解决方案也比较简单,在Pycharm中禁用Python科学绘图窗口(然后它将使用默认的matplotlib后端)就可以(ctrl+V)
File > Settings > Tools > Python > show plots in tool window 云在天 发表于 2022-5-3 17:22
你最好输出一下loss和accurate的值
额,还是不太懂,您可以说的具体一点吗,怎么更改这两个的值呢?这块相关的知识没找见 本帖最后由 轮回过客 于 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 略懂,帮你看看