深度学习:可视化-结果loss acc可视化及测试数据显示
文章预览:
- 1.可视化train,test的loss acc
- 1.1 案例:交通指示牌识别案例-history数组
- 1.2 一张图两条曲线loss 写法总结
- step1 定义数组
- step2 添加数据
- step3 画图
- 效果
- 2.可视化测试结果
- 3 loss曲线生成及保存
- 4GAN -真实图片与生成图片
- (1)真实图片与生成图片对比
- (2)生成图片的gif
1.可视化train,test的loss acc
1.1 案例:交通指示牌识别案例-history数组
代码地址:E:\项目例程\猫狗分类\迁移学习\猫狗_resnet18_2 \猫狗分类_迁移学习可视化
- 导入库
from collections import defaultdict
- 训练函数中构建一个默认value为list的字典
history = defaultdict(list) # 构建一个默认value为list的字典
- 训练函数中保存train_loss,train_acc,test_loss,test_acc结果
history['train_acc'].append(train_accuracy)history['train_loss'].append(train_loss)history['val_acc'].append(val_accuracy)history['val_loss'].append(val_loss)
- 训练函数返回
return model, history
- 训练模型调用时
# 调用训练函数训练
model_conv, history = train_model(model_conv,criterion,optimizer_conv,exp_lr_scheduler,num_epochs=30
)
- 绘制函数 两张图,每个图两个曲线,写法固定
注意:若运行不出图,则加plt.show()
# 绘制 loss, acc 写法固定:两张表
def plot_training_history(history):fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(18, 6))ax1.plot(history['train_loss'], label='train loss')ax1.plot(history['val_loss'], label='val loss')ax1.set_ylim([-0.05, 1.05])ax1.legend()ax1.set_ylabel('Loss')ax1.set_xlabel('Epoch')ax2.plot(history['train_acc'], label='train acc')ax2.plot(history['val_acc'], label='val acc')ax2.set_ylim([-0.05, 1.05])ax2.legend()ax2.set_ylabel('Accuracy')ax2.set_xlabel('Epoch')fig.suptitle('Training History')plt.show()plot_training_history(history)
结果曲线展示:
1.2 一张图两条曲线loss 写法总结
案例:gan-手写数字 画G_loss,D_loss
代码位置 :E:\项目例程\GNN\手写数字\3_可视化
步骤:
step1 定义数组
G_losses = []
D_losses = []
step2 添加数据
G_losses.append(sum_loss.item())
D_losses.append(d_loss.item())
step3 画图
x=[i for i in range(len(G_losses))]
figure = plt.figure(figsize=(20, 8), dpi=80)
plt.plot(x,G_losses,label='G_losses')
plt.plot(x,D_losses,label='D_losses')
plt.xlabel("iterations",fontsize=15)
plt.ylabel("loss",fontsize=15)
plt.legend()
plt.grid()
plt.show()
效果
2.可视化测试结果
代码地址:E:\项目例程\猫狗分类\迁移学习\猫狗_resnet18_2 \猫狗分类_迁移学习可视化
- 定义结果可视化函数
注意:plt.subplot(4,4,i+1) 应根据batch_size修改,本案例batch_size=16.故为4x4
# 测试结果可视化函数
def visualize_model(model):model.eval()with torch.no_grad():inputs, labels = next(iter(dataloaders['val']))inputs = inputs.to(device)labels = labels.to(device)outputs = model(inputs)preds = outputs.argmax(1)plt.figure(figsize=(9, 9))for i in range(inputs.size(0)):plt.subplot(4,4,i+1) #根据batch_size修改plt.axis('off')plt.title(f'pred: {class_names[preds[i]]}|true: {class_names[labels[i]]}')im = no_normalize(inputs[i].cpu())plt.imshow(im)plt.savefig('train.jpg')plt.show()
- 调用函数
# 测试结果可视化
visualize_model(model_conv)
效果展示:
3 loss曲线生成及保存
代码参考:E:\项目例程\GNN\DCGAN\02DCGAN_oxford17
DCGAN生成鲜花
figure_save_path="./figures/"
plt.figure(1,figsize=(8, 4))plt.title("Generator and Discriminator Loss During Training")plt.plot(self.G_loss_list[::10], label="G")plt.plot(self.D_loss_list[::10], label="D")plt.xlabel("iterations")plt.ylabel("Loss")plt.axhline(y=0, label="0", c="g") # asymptoteplt.legend()plt.savefig(self.figure_save_path + str(num_epochs) + 'epochs_' + 'loss.jpg', bbox_inches='tight')
4GAN -真实图片与生成图片
代码参考:E:\项目例程\GNN\DCGAN\02DCGAN_oxford17
(1)真实图片与生成图片对比
plt.figure(4,figsize=(8, 4))# Plot the real imagesplt.subplot(1, 2, 1)plt.axis("off")plt.title("Real Images")real = next(iter(self.dataloader)) # real[0]image,real[1]labelplt.imshow(utils.make_grid(real[0][:self.num_showimage] * 0.5 + 0.5, nrow=10).permute(1, 2, 0))# Load the Best Generative Model# self.G.load_state_dict(# torch.load(self.model_save_path + 'disc_{}.pth'.format(epoch), map_location=torch.device(self.device)))self.G.eval()# Generate the Fake Imageswith torch.no_grad():fake = self.G(self.fixed_noise).cpu()# Plot the fake imagesplt.subplot(1, 2, 2)plt.axis("off")plt.title("Fake Images")fake = utils.make_grid(fake[:self.num_showimage] * 0.5 + 0.5, nrow=10)plt.imshow(fake.permute(1, 2, 0))# Save the comparation resultplt.savefig(self.figure_save_path + str(num_epochs) + 'epochs_' + 'result.jpg', bbox_inches='tight')plt.show()
(2)生成图片的gif
import matplotlib.pyplot as plt
import matplotlib.animation as animationfig = plt.figure(3,figsize=(5, 5))plt.axis("off")ims = [[plt.imshow(item.permute(1, 2, 0), animated=True)] for item in self.img_list]ani = animation.ArtistAnimation(fig, ims, interval=1000, repeat_delay=1000, blit=True)#HTML(ani.to_jshtml())# ani.to_html5_video()ani.save(self.figure_save_path + str(num_epochs) + 'epochs_' + 'generation.gif')
深度学习:可视化-结果loss acc可视化及测试数据显示相关推荐
- 损失能收敛到0么 深度学习_人工智能-Tensorflow进行深度学习的一些损失函数的可视化...
TensorFlow目前是数值计算的最佳开源库,它使机器学习更快更容易.在这篇文章中,您将学习机器学习中使用的一些损失函数.损失函数在机器学习领域非常重要.它们用作测量模型预测输出Y_out与grou ...
- 【深度学习】模型训练过程可视化思路(可视化工具TensorBoard)
[深度学习]模型训练过程可视化思路(可视化工具TensorBoard) 文章目录 1 TensorBoard的工作原理 2 TensorFlow中生成log文件 3 启动TensorBoard,读取l ...
- Keras深度学习实战(11)——可视化神经网络中间层输出
Keras深度学习实战(11)--可视化神经网络中间层输出 0. 前言 1. 可视化神经网络中间层输出 2. 利用 Keras 可视化神经网络中间层输出 2.1 数据加载 2.2 可视化第一个卷积层的 ...
- 【深度学习实战】---TensorBoard网络可视化
[深度学习实战]-TensorBoard网络可视化 前记 为了能够更加深层次的理解我们的网络结构,不必要是画一份简简单单的网络的草图(如[深度学习实战]迈出第一步------编写第一个神经网络),那么 ...
- 深度学习数据驱动_利用深度学习实现手绘数据可视化的生成
前一段时间,我开发了Sketchify, 该工具可以把任何以SVG为渲染技术的可视化转化为手绘风格.(参考手绘风格的数据可视化实现 Sketchify) 那么问题来了,很多的chart是以Canvas ...
- 【深度学习系列】——神经网络的可视化解释
这是深度学习系列的第三篇文章,欢迎关注原创公众号 [计算机视觉联盟],第一时间阅读我的原创!回复 [西瓜书手推笔记] 还可获取我的机器学习纯手推笔记! 深度学习系列 [深度学习系列]--深度学习简介 ...
- 深度学习网络和特征图可视化的工具介绍
1.深度学习网络结构画图工具: 网络结构画图工具https://cbovar.github.io/ConvNetDraw/ 输入:层信息 输出:网络结构图 网络结构图实例 2.caffe可视化工具 输 ...
- 利用深度学习实现手绘数据可视化的生成
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 前一段时间,我开发了Sketchify, 该工具可以把任何以SVG为渲染技术的可视化转化为手绘风格.(参考手绘风格的数据可视化实现 ...
- 实战技术:利用深度学习实现手绘数据可视化的生成
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 前一段时间,我开发了Sketchify, 该工具可以把任何以SVG为渲染技术的可视化转化为手绘风格.(参考手绘风格的数据可视化实现 ...
最新文章
- Sort_Buffer_Size 设置对服务器性能的影响
- 算法-有向环和拓扑排序
- sklearn学习(一)
- Django:视图和URL配置
- c语言实现堆Stack(附完整源码)
- git和php的区别,Git与Github的有什么区别
- Python实战从入门到精通第十一讲——可接受任意数量参数的函数
- C11头文件threads.h声明了创建和管理线程,信号,条件变量的函数
- centos mysql-5.5.20_mysql-5.5.20+CentOS 6.2 编译安装全过程详解(2)
- python中软件包安装
- *第七周*数据结构实践项目三【负数把整数赶出队列】
- PotPlayer LAV MadVR SVP4/BFRC播放器设置(极为详细,硬解,渲染,插帧按CPU性能评级)
- 交换机trunk模式工作原理
- Java利用mpxj解析mpp格式文件
- english_搭配
- 让你细思极恐的社会潜规则
- getOutputStream() has already been called for this response 当前响应已经调用了方法getOutputStream()
- eclipse第十七课时
- day12 递归、表达式、内置函数
- 使用PayPal收款要注意哪些细节?
热门文章
- IT程序员怎么分级别,以及每个级别应该会什么内容?
- 未来楼宇智慧解决方案
- acer计算机硬件配置,硬件配置与游戏测试_Acer宏碁笔记本电脑_笔记本评测-中关村在线...
- java excel 数据有效性_Java 设置Excel数据验证(数据有效性)
- 维斯(Vizrt)虚拟演播室调试需要排的雷
- SAP纺织行业解决方案
- 2017第一季度工作总结
- DBeaver 如何配置离线驱动
- 【数据结构与算法】之深入解析“摘樱桃”的求解思路与算法示例
- 网络防火墙的性能参数