神经网络 pytorch 分类二维矩阵图像和一维向量的方法
在网上找资料的过程中,发现并没有特别细致的讲解分类图像和分类一维向量的做法,导致我捅咕了有几天才弄明白,可能使我比较菜吧......现在在这里记录一下。
首先需要明确,前文我们已经讲解了包装数据集的方法,但是注意,无论是图像还是向量数据,都是有固定格式的,因为我们在做卷积的时候有数据格式要求。使用的时候我们必须将自己的数据变换为指定的格式,而变换的方法无非numpy.array torch.from_numpy 香江列表转换为矩阵,再从矩阵转换为tensor,这其中的操作就是矩阵的操作,在上一篇中简单有一个例子,简单了解一下就可以,注意以下问题
- 矩阵维度必须满足卷积的输入
- label是有数据类型要求的,tensor可以直接使用.int() .long()等方法就行转换类型
- 变换时,可以使用矩阵的赋值和循环操作结合,完成指定格式的数据构建 具体看前一篇(神经网络 pytorch 数据集读取(自动读取数据集,手动读取自己的数据))
基础
数据分为两部分:原始数据,数据标签
图像数据要求的格式为【样本序号,维度,尺寸w,尺寸h】、
向量要求是【样本序号,维度,长度】
这里的维度代表的是。。。。举个例子一张彩色图像可以分为三个RGB通道
所以一张图像读取进来的数据是【维度,尺寸w,尺寸h】,在加上组成数据集的样本维度,就变为了【样本序号,维度,尺寸w,尺寸h】。
而对于一维向量来说,由于没有宽高,只有长度,所以就变为了
【样本序号,维度,长度】
实验
首先是图像的二维数据测试
conv1 = nn.Conv2d(3, 6, 5)
conv1 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5)
这是二维卷积函数,可以看到输入要求3维度 输出6图 核大小5维
在卷积中使用的是batch分组进行处理的,所以在图像的基础上,我们还需要再有一个维度
【batch,维度,尺寸w,尺寸h】,注意如果使用数据集的话,batch是不需要我们管的
我们创建数据
conv1 = nn.Conv2d(3, 6, 5)
input = torch.randn((3,15,15)) #这是一个图像的三维 尺寸
conv1(input)
# Expected 4-dimensional input for 4-dimensional weight [6, 3, 5, 5], but got input of size [3, 15, 15] instead
# 要求输入为四维 我们手动创建一个样本集
input = torch.randn((5,3,15,15)) # 五张图像 三维 尺寸
conv1(input)
tensor([[[[-0.3294, -0.4139, -0.2850, ..., 1.3533, -0.6759, 0.1333],[ 0.3084, 0.1447, -0.1788, ..., 0.9002, 0.2388, 0.9239],[ 0.0672, 0.2839, 1.3691, ..., -0.1531, -1.0619, -1.0429],...,[-0.2464, 0.4404, 0.6528, ..., 0.4497, -0.2516, -0.1859],[-0.3036, 0.1986, 0.6850, ..., -0.1474, -0.3568, -0.1044],[ 0.0053, 0.4006, -0.2252, ..., -0.0466, 0.0872, 0.0611]],[[ 1.2968, -0.4136, -0.2831, ..., -0.1858, -0.9087, 0.5293],[ 0.4907, 0.6914, 0.3149, ..., 0.3644, 0.5656, -0.8398],[ 0.1517, -0.1849, -0.0562, ..., -0.5456, -0.4508, -0.6404],..., 省略了...,[-0.0307, 0.5376, -0.8060, ..., -0.1753, -0.7272, -0.8466],[-0.2170, -0.2148, -0.5993, ..., 0.0340, 0.3307, 0.0338],[ 0.3770, 0.5640, 0.0672, ..., -0.1321, -0.7813, 0.2787]]]],grad_fn=<ThnnConv2DBackward>)
对于一维的学习来说,输入是三维的,【样本序号,维度,长度】,继续试验一下
conv1 = nn.Conv1d(in_channels=2, out_channels=5, kernel_size=3)
# 要求输入为二通道
input = torch.randn((4,2,12))
# 四个样本 二通道 长度12
conv1(input)tensor([[[ 0.5587, 0.6236, -0.9632, 0.3872, -0.0721, 0.3657, -0.1207,-0.0946, 0.3658, -0.3244],[ 0.2307, -0.2126, -1.2743, -0.4488, -0.2530, -0.0273, -0.7402,0.0616, -0.9748, -0.6859],[-0.7817, -0.3664, -1.1842, -0.7359, 0.4219, 0.6737, -0.1494,-0.0247, -0.2200, -0.1169],[ 0.4604, -0.6700, 0.3021, 0.6606, 2.2227, 0.3312, 0.5341,0.8271, -0.7024, 0.7300],[ 0.0626, -0.4945, 0.9787, 0.0997, 0.4146, -0.6470, 0.6352,-0.0103, -0.0971, 0.6143]],............. 省略[[-0.0005, 0.6630, 0.2095, 0.4185, 0.0364, 0.8880, 0.1139,0.3172, -0.1049, 0.1099],[-0.2716, 0.0824, -0.5943, 0.0037, -0.6148, 0.3952, -0.1688,-0.3591, -0.6956, -0.5202],[-0.7579, -1.2024, -1.1410, -0.3624, -1.0320, -0.2396, -0.5218,-0.7605, -0.4535, -0.6400],[ 0.0183, -0.9959, 0.3437, -0.0709, 0.3040, 0.4322, 0.0317,0.1266, -0.0621, 0.7542],[ 0.3895, -0.4234, 0.6149, -0.4937, 0.5438, -0.4094, -0.0073,0.1984, 0.0270, 0.5017]]], grad_fn=<SqueezeBackward1>)
二维学习中,主要使用的是
self.conv1 = nn.Conv2d(in_channels=1, out_channels=5, kernel_size=7, stride=2, padding=1)
self.fc1 = nn.Linear(2432,512)
F.max_pool2d(self.conv1(x), 2)
一维
self.conv1 = nn.Conv1d(in_channels=1, out_channels=5, kernel_size=7, stride=2, padding=1)
self.fc1 = nn.Linear(2432,512)
F.max_pool1d(self.conv1(x), 2)
附录
下面的就是一些常用的可能的部分,每个都有很多种选择,但前提可定是需要知道它有......
其中激活函数包括多种,用于处理输出形式,规范等
torch.nn.functional.threshold(input, threshold, value, inplace=False)
torch.nn.functional.relu(input, inplace=False)
torch.nn.functional.hardtanh(input, min_val=-1.0, max_val=1.0, inplace=False)
torch.nn.functional.relu6(input, inplace=False)
torch.nn.functional.elu(input, alpha=1.0, inplace=False)
torch.nn.functional.leaky_relu(input, negative_slope=0.01, inplace=False)
torch.nn.functional.prelu(input, weight)
torch.nn.functional.rrelu(input, lower=0.125, upper=0.3333333333333333, training=False, inplace=False)
torch.nn.functional.logsigmoid(input)
torch.nn.functional.hardshrink(input, lambd=0.5)
torch.nn.functional.tanhshrink(input)
torch.nn.functional.softsign(input)
torch.nn.functional.softplus(input, beta=1, threshold=20)
torch.nn.functional.softmin(input)
torch.nn.functional.softmax(input)
torch.nn.functional.softshrink(input, lambd=0.5)
torch.nn.functional.log_softmax(input)
torch.nn.functional.tanh(input)
torch.nn.functional.sigmoid(input)
常用的就是relu什么的,实际上种类很多,还有各种改进,具体的看这位大佬的吧
https://www.jianshu.com/p/68bd249327ce,列举了几种样式
优化器的话也是有上十种,基于基类 Optimizer
随机梯度下降算法 SGD算法
torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)平均随机梯度下降算法 ASGD算法
torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0)AdaGrad算法
torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0)自适应学习率调整 Adadelta算法
torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)RMSprop算法
torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)自适应矩估计 Adam算法
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)Adamax算法(Adamd的无穷范数变种)
torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)SparseAdam算法
torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08)L-BFGS算法
torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-05, tolerance_change=1e-09, history_size=100, line_search_fn=None)弹性反向传播算法 Rprop算法
torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50))大佬的很详细
https://blog.csdn.net/shanglianlm/article/details/85019633
池化方法也有好几种
# https://blog.csdn.net/HowardWood/article/details/79508805
torch.nn.functional.avg_pool1d(input, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True)
torch.nn.functional.avg_pool2d(input, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True)
torch.nn.functional.max_pool1d(input, kernel_size, stride=None, padding=0, dilation=1, ceil_mode=False, return_indices=False)
torch.nn.functional.max_pool2d(input, kernel_size, stride=None, padding=0, dilation=1, ceil_mode=False, return_indices=False)
torch.nn.functional.max_unpool1d(input, indices, kernel_size, stride=None, padding=0, output_size=None)
torch.nn.functional.max_unpool2d(input, indices, kernel_size, stride=None, padding=0, output_size=None)
torch.nn.functional.lp_pool2d(input, norm_type, kernel_size, stride=None, ceil_mode=False)
torch.nn.functional.adaptive_max_pool1d(input, output_size, return_indices=False)
torch.nn.functional.adaptive_max_pool2d(input, output_size, return_indices=False)
torch.nn.functional.adaptive_avg_pool1d(input, output_size)
torch.nn.functional.adaptive_avg_pool2d(input, output_size)
神经网络 pytorch 分类二维矩阵图像和一维向量的方法相关推荐
- c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组
遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...
- 机器学习之数学基础(二)~数组、向量、矩阵、向量空间、二维矩阵
1. 概述 在学习机器学习(machine learning)或模式识别(pattern recognition)过程中,我经常会困惑于向量.数组和矩阵这三种数据结构,而在学习张学工教授<模式识 ...
- 如何构建n*n二维矩阵并转变为一维一一对应矩阵
如何构建n*n二维矩阵并转变为一维一一对应矩阵 利用matlab构建双列矩阵 在数据处理过程中,我们经常会遇到将二维矩阵转变为一维矩阵.如图1所示. 向构建图1右侧的样子的矩阵,其原始结构就是左侧那种 ...
- LeetCode 73矩阵置零74搜素二维矩阵75颜色分类
新人公众号(求支持):bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打 ...
- matlab 把图像变成二维的,matlab图像怎么变成二维矩阵
求:matlab二维直方图图像分割程序.. 我给你个网站``里面的教学很详细~~希望能帮到你~~~~反正里面的软件教程很多``就是不知道有没你要找的``如果有~~给我加分哈``http://tech. ...
- 【CV】图像卷积计算即二维矩阵卷积(Python)
卷积与数字图像 什么是卷积 一维线性卷积 参数'full' 参数'same' 参数'valid' 二维线性卷积 什么是卷积 一维线性卷积 线性卷积(linear convolution) 在时域描述线 ...
- [学习笔记]人工智能-神经网络对数据进行分类,构建二维矩阵
1.对投喂数据进行极值获取,构造更多数据做准备 示例 plot_decision_regions(x, y, ppn, resolution=0.02)def plot_decision_region ...
- Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)
Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积) 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...
- LeetCode 07: T48. 旋转图像 (中等); T54. 螺旋矩阵(中等); T240. 搜索二维矩阵 II (中等)
文章目录 T19: 48. 旋转图像 (中等) 思路 解法 1: 新增数组 解法 2: 原地旋转 T20: 54. 螺旋矩阵(中等) 思路 解法: 到边界换方向 T21: 240. 搜索二维矩阵 II ...
最新文章
- mybatis if test 用法_SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis拿得出手的功能之一...
- php 模板使用,TMDPHP 模板引擎使用教程
- JVM调优:定位垃圾的常用算法
- 服务器系统js文件报错,js服务器文件
- 工业轨式 1-16路 4-20MA 模拟量光端机产品介绍
- 2017.9.23 Count on a tree 思考记录
- springboot 统一异常处理
- python中的装饰器、装饰器模式_浅析Python装饰器以及装饰器模式
- iPhone/iPad/iPod touch编程时版本区分
- Farrago for Mac(强大的现场多音频播放工具)
- C. Tourist Problem
- php floor,ceil,round,intval函数
- 一文带你了解华为私有云
- 存储容量及相关计算单位
- 抖音上火的电脑代码cmd_抖音很火的:仅靠三行代码,帮妹子“修电脑”?如何做到的!...
- html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)
- Go实战--也许最快的Go语言Web框架kataras/iris初识四(i18n、filelogger、recaptcha)
- 宝塔php安全模式,windows server 2016关闭IE增强安全模式方法
- 财务自由,靠“投机”能实现吗?(内含福利)
- 【Unity】Firebase-Google登录身份验证功能接入流程