深度学习可视化的一些工具+pytorch实现回归与卷积可视化

一.深度学习可视化的一些工具

1.深度学习网络结构画图工具:https://cbovar.github.io/ConvNetDraw/

2.将.onnx放入即可,可视化网络结构:https://lutzroeder.github.io/netron/

3.结构可视化工具:https://github.com/HarisIqbal88/PlotNeuralNet

二.回归

线性回归的损失函数和梯度更新如下图:

一,numpy实现线性回归梯度下降

import numpy as np
import matplotlib.pyplot as plt
def get_fake_data(batch_size=8):''' 产生随机数据:y=x*2+3,加上了一些噪声'''x = np.random.rand(batch_size, 1) * 5y = x * 2 + 3 + np.random.rand(batch_size, 1)*2return x, ydef get_gradient(theta,x,y):m=x.shape[0]Y_estimate=np.dot(x,theta)assert (Y_estimate.shape==(m,))error=Y_estimate-yassert (error.shape==(m,))cost =1.0/(2*m)*np.sum(error**2)#grad=(1.0/m)*np.dot(x.T,error).reshape(-1)#(2,)grad = (1.0 / m) * np.dot(error,x) # (2,)return grad,cost
def gradient_descent(x,y,iterations,alpha):theta=np.random.randn(2)costs=[]for i in range(iterations):grad,cost=get_gradient(theta,x,y)new_theta=theta-alpha*gradif i%100==0:print('{} iterations cost={}'.format(i,cost))costs.append(cost)theta=new_thetareturn costs,thetadef vis_data():# 来看看产生的x-y分布x, y = get_fake_data(batch_size=16)print(x.shape)print(y.shape)plt.scatter(np.squeeze(x), np.squeeze(y))plt.show()
if __name__=='__main__':batch_size=32data_x, data_y = get_fake_data(batch_size=batch_size)#添加一列为1的向量 实际上就是乘以 theta 就是bdata_x=np.hstack((data_x,np.ones_like(data_x)))#(m,2)print(data_x)print(data_x.shape)costs,theta=gradient_descent(data_x,np.squeeze(data_y),iterations=50000,alpha=0.002)print(data_y.shape)#print(theta)y_predict=np.dot(data_x,theta)#theta[0]+theta[1]*data_x[:,1]print(y_predict.shape)plt.figure()#样本图print(data_x[:2])plt.scatter(data_x[:,0],np.squeeze(data_y),c='red')plt.plot(data_x[:,0],y_predict)plt.show()

红色的是散列点,蓝色的线是拟合的直线。

二,pytorch实现线性回归梯度下降

import numpy as np
import matplotlib.pyplot as plt
import torch as tdevice=t.device('cpu')def get_fake_data(batch_size=8):''' 产生随机数据:y=x*2+3,加上了一些噪声'''x = t.rand(batch_size, 1,device=device) * 5y = x * 2 + 3 + t.rand(batch_size, 1)*2return x, ydef vis_data():# 来看看产生的x-y分布x, y = get_fake_data(batch_size=16)print(x.shape)print(y.shape)plt.scatter(np.squeeze(x), np.squeeze(y))plt.show()
if __name__=='__main__':# vis_data()m=batch_size=32data_x, data_y = get_fake_data(batch_size=batch_size)#添加一列为1的向量 实际上就是乘以 theta 就是bdata_x=t.from_numpy(np.hstack((data_x,np.ones_like(data_x))))#(m,2)print(data_x.shape)theta = t.randn((2, 1),requires_grad=True)iterations=500lr = 0.005  # 学习率losses=[]for i in range(iterations):# forward:计算lossy_pred = data_x.mm(theta)print('y_pred',y_pred.shape)loss = 1/(2*m) * (y_pred - data_y) ** 2print('loss',loss.shape)loss = loss.sum()print('loss', loss.shape)losses.append(loss.item())# backward:手动计算梯度loss.backward()# 更新参数theta.data.sub_(lr * theta.grad.data)# 梯度清零theta.grad.data.zero_()print('losses=',losses)# 画图plt.scatter(np.squeeze(data_x[:,0]), np.squeeze(data_y),c='red')y_predict=data_x.mm(theta)print('y_predict.shape',y_predict.shape)print(data_x.detach().numpy())plt.plot(data_x.detach().numpy()[:,0], y_predict.detach().numpy())  # predictedplt.show()

三.实现ResNet34

from torch import  nn
import torch as t
from torch.nn import  functional as Fclass ResidualBlock(nn.Module):'''实现子module: Residual Block'''def __init__(self, inchannel, outchannel, stride=1, shortcut=None):super(ResidualBlock, self).__init__()self.left = nn.Sequential(nn.Conv2d(inchannel, outchannel, 3, stride, 1, bias=False),nn.BatchNorm2d(outchannel),nn.ReLU(inplace=True),nn.Conv2d(outchannel, outchannel, 3, 1, 1, bias=False),nn.BatchNorm2d(outchannel))self.right = shortcutdef forward(self, x):out = self.left(x)residual = x if self.right is None else self.right(x)out += residualreturn F.relu(out)class ResNet(nn.Module):'''实现主module:ResNet34ResNet34 包含多个layer,每个layer又包含多个residual block用子module来实现residual block,用_make_layer函数来实现layer'''def __init__(self, num_classes=1000):super(ResNet, self).__init__()# 前几层图像转换self.pre = nn.Sequential(nn.Conv2d(3, 64, 7, 2, 3, bias=False),nn.BatchNorm2d(64),nn.ReLU(inplace=True),nn.MaxPool2d(3, 2, 1))# 重复的layer,分别有3,4,6,3个residual blockself.layer1 = self._make_layer(64, 64, 3)self.layer2 = self._make_layer(64, 128, 4, stride=2)self.layer3 = self._make_layer(128, 256, 6, stride=2)self.layer4 = self._make_layer(256, 512, 3, stride=2)# 分类用的全连接self.fc = nn.Linear(512, num_classes)def _make_layer(self, inchannel, outchannel, block_num, stride=1):'''构建layer,包含多个residual block'''shortcut = nn.Sequential(nn.Conv2d(inchannel, outchannel, 1, stride, bias=False),nn.BatchNorm2d(outchannel))layers = []layers.append(ResidualBlock(inchannel, outchannel, stride, shortcut))for i in range(1, block_num):layers.append(ResidualBlock(outchannel, outchannel))return nn.Sequential(*layers)def forward(self, x):x = self.pre(x)x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = self.layer4(x)x = F.avg_pool2d(x, 7)x = x.view(x.size(0), -1)return self.fc(x)
model = ResNet()
input  = t.randn(1, 3, 224, 224)
o = model(input)
print(o.shape)

四,卷积可视化

1.可视化滤波器

import numpy as np
import matplotlib.pyplot as plt
import cv2
def get_filters():filter_vals = np.array([[-1, -1, 1, 1],[-1, -1, 1, 1],[-1, -1, 1, 1],[-1, -1, 1, 1]])print('Filter shape: ', filter_vals.shape)# Defining the Filtersfilter_1 = filter_valsfilter_2 = -filter_1filter_3 = filter_1.Tfilter_4 = -filter_3filters = np.array([filter_1, filter_2, filter_3, filter_4])return filtersdef vis_filter(filters):# Check the Filtersfig = plt.figure(figsize=(10, 5))for i in range(4):ax = fig.add_subplot(1, 4, i + 1, xticks=[], yticks=[])ax.imshow(filters[i], cmap='gray')ax.set_title('Filter %s' % str(i + 1))# width, height = filters[i].shape# for x in range(width):#     for y in range(height):#         ax.annotate(str(filters[i][x][y]), xy=(y, x),#                     color='white' if filters[i][x][y] < 0 else 'black')plt.show()filters=get_filters()
print(filters.shape)
vis_filter(filters)

2.将自定义的滤波核作为卷积核对狗狗进行卷积,并可视化

import numpy as np
import matplotlib.pyplot as plt
import cv2
def get_filters():filter_vals = np.array([[-1, -1, 1, 1],[-1, -1, 1, 1],[-1, -1, 1, 1],[-1, -1, 1, 1]])print('Filter shape: ', filter_vals.shape)# Defining the Filtersfilter_1 = filter_valsfilter_2 = -filter_1filter_3 = filter_1.Tfilter_4 = -filter_3filters = np.array([filter_1, filter_2, filter_3, filter_4])return filtersdef vis_filter(filters):# Check the Filtersfig = plt.figure(figsize=(10, 5))for i in range(4):ax = fig.add_subplot(1, 4, i + 1, xticks=[], yticks=[])ax.imshow(filters[i], cmap='gray')ax.set_title('Filter %s' % str(i + 1))# width, height = filters[i].shape# for x in range(width):#     for y in range(height):#         ax.annotate(str(filters[i][x][y]), xy=(y, x),#                     color='white' if filters[i][x][y] < 0 else 'black')plt.show()import torch
import torch.nn as nn
import torch.nn.functional as Fclass Net(nn.Module):def __init__(self, weight):super(Net, self).__init__()# initializes the weights of the convolutional layer to be the weights of the 4 defined filtersk_height, k_width = weight.shape[2:]# assumes there are 4 grayscale filtersself.conv = nn.Conv2d(1, 4, kernel_size=(k_height, k_width), bias=False)# initializes the weights of the convolutional layerself.conv.weight = torch.nn.Parameter(weight)print(self.conv.weight.shape)# define a pooling layerself.pool = nn.MaxPool2d(2, 2)def forward(self, x):# calculates the output of a convolutional layer# pre- and post-activationconv_x = self.conv(x)activated_x = F.relu(conv_x)# applies pooling layerpooled_x = self.pool(activated_x)# returns all layersreturn conv_x, activated_x, pooled_xif __name__ == '__main__':img_path = 'dog.png'bgr_img = cv2.imread(img_path)gray_img = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2GRAY)print(gray_img.shape)# Normalisegray_img = gray_img.astype("float32") / 255filters=get_filters()print(filters.shape)vis_filter(filters)# instantiate the model and set the weightsweight = torch.from_numpy(filters).unsqueeze(1).type(torch.FloatTensor)print(weight.shape)model = Net(weight)# print out the layer in the networkprint(model)gray_img_tensor = torch.from_numpy(gray_img).unsqueeze(0).unsqueeze(1)print(gray_img_tensor.shape)conv_img,relu_img,pool_img=model(gray_img_tensor)print(conv_img.shape)print(relu_img.shape)print(pool_img.shape)conv_img=conv_img.detach().numpy().squeeze()relu_img=relu_img.detach().numpy().squeeze()pool_img=pool_img.detach().numpy().squeeze()print(conv_img.shape)vis_filter(conv_img)vis_filter(relu_img)vis_filter(pool_img)

conv输出

relu输出

pool输出

绘图形式换成:cmap=plt.cm.jet

conv输出结果

relu输出结果

pool输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《人工智能转型手册》,吴恩达 著

来源&#xff1a;量子位AI大者&#xff0c;为国为民。从今往后&#xff0c;市值5亿美元至5000亿美元的企业&#xff0c;都能用得上、用得会、用得好吴恩达的AI转型经验了。这是他在谷歌和百度带队AI的核心总结&#xff0c;也是他见得广、听得多、被咨询无数后的精华提炼。一册《…

Android Studio开发入门-引用jar及so文件

作者&#xff1a;王先荣 最近初学安卓开发&#xff0c;因为以前从未用过JAVA&#xff0c;连基本的语法都要从头开始&#xff0c;所以不太顺利。在尝试使用百度语音识别引擎时遇到了如何引用jar及so文件的问题。在GOOGLE加多次尝试之后&#xff0c;找到了一个比较简单的方法&…

腾讯杰出科学家写给2029的信:计算机视觉AI技术的爆点在哪里?

文 |腾讯杰出科学家、腾讯优图实验室负责人 贾佳亚 腾讯优图实验室总监 戴宇荣博士 郑冶枫博士近年来&#xff0c;计算机视觉AI技术发展迅速&#xff0c;尤其是人工智能的引入大大提升了算法的能力和实用性。在数不清的视觉AI应用中&#xff0c;我们认为未来技术的爆发点可能来…

pytorch实现Dropout与正则化防止过拟合

numpy实现dropout与L1,L2正则化请参考我另一篇博客 https://blog.csdn.net/fanzonghao/article/details/81079757 pytorch使用dropout与L2 import torch import matplotlib.pyplot as plt torch.manual_seed(1) # Sets the seed for generating random numbers.reproduc…

“蚁人”不再是科幻!MIT最新研究,能把任何材料物体缩小1000倍 | Science

来源&#xff1a;量子位科学加速&#xff0c;科幻成真也在加速。漫威世界中&#xff0c;蚁人是蚂蚁大小的超级英雄&#xff0c;靠一件“变身服”&#xff0c;人类就能在更微观的世界里大干一场。现在&#xff0c;类似的科幻想象&#xff0c;被MIT变成现实。丨小小小&#xff0c…

Android ARM指令学习

在逆向分析Android APK的时候&#xff0c;往往需要分析它的.so文件。这个.so文件就是Linux的动态链接库&#xff0c;只不过是在ARM-cpu下编译的。所以学习Android下的ARM指令很重要。目前&#xff0c;市面上的ARM-cpu基本都支持一种叫做THUMB的指令集模式。这个THUMB指令集可以…

cuda基础知识

nvidia-cuda 手册:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#kernels nvidia cuda 教学视频 https://www.nvidia.cn/object/cuda_education_cn_old.html 介绍: CUDA编程模型是一个异构模型&#xff0c;需要CPU和GPU协同工作。在CUDA中&#xff0c;…

苹果着手自研调制解调器,以应对高通天价专利费

来源&#xff1a;DeepTech深科技近日&#xff0c;苹果官方发布一份招聘信息&#xff0c;其中有一个职位就非常惹人注意&#xff0c;根据信息&#xff0c;苹果准备招募两名蜂窝调制解调器系统架构师&#xff0c;一名构架师的工作地点在圣克拉拉&#xff0c;另一名构架师的工作地…

labelme标注文件转coco json,coco json转yolo txt格式,coco json转xml, labelme标注文件转分割,boxes转labelme json

参考&#xff1a;https://github.com/wkentaro/labelme 一.labelme标注文件转coco json 1.标注时带图片ImageData信息&#xff0c;将一个文件夹下的照片和labelme的标注文件&#xff0c;分成了train和val的coco json文件和照片&#xff0c; (COCO的格式&#xff1a; [x1,y1,…

“深度学习之父”大谈AI:寒冬不会出现,论文评审机制有损创新

来源&#xff1a; AI科技大本营整理&#xff1a;琥珀近日《连线》杂志发表了一篇文章&#xff0c;记录了与“深度学习之父” Geoffrey Hinton 围绕人工智能伦理、技术、学术等领域的采访实录。当被问到如今人工智能是否将走进寒冬时&#xff0c;Hinton 的回答非常坚决&#xff…

GDataXML解析XML文档

一、GDataXMLNode说明GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2--DOM处理方式进行了封装&#xff0c;能对较小或中等的xml文档进行读写操作且支持XPath语法。 使用方法&#xff1a;1、获取GDataXMLNode.h/m文件&#xff0c;将GDataXMLNode.h/m文件添加…

RetinaNet+focal loss

one stage 精度不高&#xff0c;一个主要原因是正负样本的不平衡&#xff0c;以YOLO为例&#xff0c;每个grid cell有5个预测&#xff0c;本来正负样本的数量就有差距&#xff0c;再相当于进行5倍放大后&#xff0c;这种数量上的差异更会被放大。 文中提出新的分类损失函数Foca…

真实用户首次披露Waymo无人车服务体验: 为避开左转, 故意绕路

来源 &#xff1a;Ars Technica编译 &#xff1a;机器之能 高璇外国网友炸了&#xff1a;「就像看了一部大导演导的烂片一样。」在过去的 18 个月里&#xff0c;Waymo 的汽车一直在凤凰城的东南角运送乘客。该公司在合同中明确规定禁止乘客讨论用户体验&#xff0c;对项目信息进…

“横平竖直”进行连线+将相邻框进行合并

一.横平竖直”进行连线 解法1.将一些坐标点按照x相等,y相等连起来 解法1.根据 x或y总有一个相等的,用np.sum来找出和为1的点,然后在连起来,存在重复连线的问题. import numpy as npcoord np.array([[10, 60],[10, 20],[20, 20],[40, 40],[40, 60],[20, 40]])img np.zeros(…

一文看透汽车芯片!巨头布局技术路线全解密【附下载】| 智东西内参

来源&#xff1a;智东西摘要&#xff1a;一文看透汽车芯片&#xff01;巨头布局技术路线全解密智能驾驶涉及人机交互、视觉处理、智能决策等&#xff0c;核心是 AI 算法和芯片。伴随汽车电子化提速&#xff0c;汽车半导体加速成长&#xff0c;2017 年全球市场规模 288 亿美元&a…

详细介绍软件架构设计的三个维度

如果你对项目管理、系统架构有兴趣&#xff0c;请加微信订阅号“softjg”&#xff0c;加入这个PM、架构师的大家庭 架构设计是一个非常大的话题&#xff0c;不管写几篇文章&#xff0c;接触到的始终只是冰山一角&#xff0c;更多的是实践中去体会。这篇文章主要介绍面向对象OO、…

中国智能语音行业研究

报告来源&#xff1a;中信证券作者&#xff1a;刘雯蜀 杨泽原 张若海智能语音作为人机交互的新型方式&#xff0c;有望大规模推广&#xff0c;中国市场是更适合语音交互的市场。2017年中国人工智能市场规模达约220亿元&#xff0c;智能语音占中国人工智能市场份额的22%&#…

SQL2012 附加数据库提示5120错误解决方法

在win8.1 x64系统上使用sql2012进行附加数据库&#xff08;包括在x86系统正在使用的数据库文件&#xff0c;直接拷贝附加在X64系统中&#xff09;时&#xff0c;提示无法打开文件&#xff0c;5120错误。 这个错误是因为没有操作权限&#xff0c;所以附加的时候出错&#xff0c;…

pytorch利用rnn通过sin预测cos 利用lstm预测手写数字

一.利用rnn通过sin预测cos 1.首先可视化一下数据 import numpy as np from matplotlib import pyplot as plt def show(sin_np,cos_np):plt.figure()plt.title(Sin and Cos, fontsize18)plt.plot(steps, sin_np, r-, labelsin)plt.plot(steps, cos_np, b-, labelcos)plt.lege…

高德纳咨询公司(Gartner)预测:2019年七大人工智能科技趋势

来源&#xff1a;创新研究摘要&#xff1a;人工智能技术对我们的工作环境、工作种类等等正在产生日益深刻的影响&#xff0c;其结果或好或坏都有可能。为应对这种改变&#xff0c;特别是负面的变化&#xff0c;高德纳咨询公司&#xff08;Gartner&#xff09;于2018年12月13日发…