机器学习笔记(3)CNN

pytorch学习日记(一)——之CIFAR10图像训练测试实战 神经网络NN编程实现,往往需要以下几个步骤: 1)定义NN,初始化NN的参数(权重和偏置) 2)准备好输入数据集 3)让输入通过NN,得到输出 4)计算输出和理想输出的loss 5)采用随机梯度下降方法(SGD),后向传播更新NN的权重和偏置,更新规则: weight = weight - learning_rate * gradient 下面,将根据这些步骤进行编程: 导入... 阅读详情

机器学习笔记(3)CNN

参考网址:https://blog.youkuaiyun.com/out_of_memory_error/article/details/81434907
https://blog.youkuaiyun.com/cxmscb/article/details/71023576

基本概念学习

输入层

对于黑白图片,输入层为nm,对于RGB图片,输入层为3nm。(nm为图片大小)

卷积

卷积是指使用卷积核进行特征提取和特征映射的过程。具有局部连接和共享权重的特点。
几个关键词:
感受视野(local receptive fields):一个像素对应回原图的区域大小,这里为卷积核的大小3*3
深度(depth):卷积核的维度
步长(stride):卷积核每次在图上移动的步长
填充值(zero-padding):是不是要在外圈加0

在这里插入图片描述
卷积就是对原图上和卷积核大小相同的区域做矩阵内积,对于上述图片,输入为3通道77的矩阵,卷积核深度为2,大小为33,即卷积核为2(深度)*3(每维个数)33,卷积结果加上偏执(3[每维个数]33)就得到输出(2[深度]33)。

池化

图片来自知乎。
在这里插入图片描述
池化也称为下采样,可以增大感受野,池化有平均池化,最大值池化。

经典网络LeNet-5学习

在这里插入图片描述
0.输入为一张13232的黑白图片。
1.第一层为卷积C1,卷积核为6155(深度,每维个数,长,宽),步长为1,输出为62828.
2.第二层为池化S2,pool核为1
622,步长为2,输出为61414.
3.第三层为卷积C3,卷积核为16655,步长为1,输出为161010
4.第四层为池化S4,pool核为1
1622,步长为2,输出为1655
5.第五层为卷积C5,卷积核为120655,卷积核大小与输入图像大小相同,输出为12011
6.第六层为全连接层F6,权重参数有120
84个,阈值参数有84个。输出为84
7.第七层为输出层,参数有10*(84+1)个,输出为10

CNN实战:手写数字识别MNIST数据集

环境

python 3.6
pytorch 1.6.0
cuda 10.2

CNN代码

import torch
import time
import numpy as np
from matplotlib import pyplot as plt
from torch import nn, optim
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

###CNN网络结构
class CNN(nn.Module):
    def __init__(self):
        # 初始化
        super(CNN,self).__init__()
        #卷积1*28*28->25*26*26,并进行归一化和激活函数,inplace-选择是否覆盖原值
        self.layer1 = nn.Sequential(
            nn.Conv2d(1,25,kernel_size=3),
            nn.BatchNorm2d(25),
            nn.ReLU(inplace=True)
        )
        #卷积25*26*26 -> 50*24*24
        self.layer2 = nn.Sequential(
            nn.Conv2d(25,50,kernel_size=3),
            nn.BatchNorm2d(50),
            nn.ReLU(inplace=True)
        )
        #池化50*24*24 -> 50*12*12
        self.layer3 = nn.Sequential(
            nn.MaxPool2d(kernel_size= 2 ,stride=2)
        )
        #卷积50*12*12 -> 100*10*10
        self.layer4 = nn.Sequential(
            nn.Conv2d(50,100,kernel_size=3),
            nn.BatchNorm2d(100),
            nn.ReLU(inplace = True)
        )
        #池化100*10*10 -> 100*5*5
        self.layer5 = nn.Sequential(
            nn.MaxPool2d(kernel_size=2,stride=2)
        )
        #全连接层100*5*5 -> 10
        self.layer6 = nn.Sequential(
            nn.Linear(100*5*5,1024),
            nn.ReLU(inplace=True),
            nn.Linear(1024,128),
            nn.ReLU(inplace=True),
            nn.Linear(128,10),
        )

    def forward(self,x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        x = self.layer5(x)
        # 将张量reshape为一维
        x = x.view(x.size(0),-1)
        x = self.layer6(x)
        return (x)

###MNIST数据集下载
#一批送入100个
batch_size = 50
#图像预处理:Totensor归一化到(0,1),Normalize标准化到(-1,1)
data_tf = transforms.Compose(
    [transforms.ToTensor(),
        transforms.Normalize([0.5],[0.5])
    ])
#使用dataset类定义数据集
dataset_train = datasets.MNIST(root='./MNIST',
    train=True,transform=data_tf,download=True)
dataset_test = datasets.MNIST(root='./MNIST',
    train=False,transform=data_tf)
#使用Dataloader加载数据(shuffle表示是否打乱数据顺序)
train_loader = DataLoader(dataset_train,batch_size=batch_size,shuffle=True)
test_loader = DataLoader(dataset_test,batch_size=batch_size,shuffle=True)

###定义和初始化
learning_rate = 0.01
epoches_num = 30
#使用GPU
CNN_model = CNN()
if torch.cuda.is_available():
    CNN_model = CNN_model.cuda()
#损失函数和优化器
lossfunction = nn.CrossEntropyLoss()
optimizer = optim.SGD(CNN_model.parameters(),lr=learning_rate)

###训练
epoch = 0
loss_log = []
for i in range(epoches_num):
    loss_print = 0
    start = time.clock()
    for data in train_loader:
        img,lable = data
        #变量初始化
        if torch.cuda.is_available():
            img = img.cuda()
            lable = lable.cuda()
        else:
            img = Variable(img)
            lable = Variable(lable)
        output = CNN_model.forward(img)
        #计算LOSS
        loss = lossfunction(output,lable)
        loss_print += loss.item() * lable.size(0)
        #梯度置零
        optimizer.zero_grad()
        #反向传播
        loss.backward()
        optimizer.step()
    end = time.clock()
    epoch+=1
    loss_print = loss_print  / (len(dataset_train))
    print('第',epoch,'轮耗时',end-start)
    print('epoch:{},loss:{}'.format(epoch, loss_print))
    loss_log.append(loss_print)



###测试
CNN_model.eval()
eval_loss = 0
eval_acc = 0
for data in test_loader:
    img, label = data
    if torch.cuda.is_available():
        img = img.cuda()
        label = label.cuda()

    out = CNN_model.forward(img)
    loss = lossfunction(out, label)
    #上一步计算loss时对这一batch的loss进行了平均,所以现在要乘label.size(0)也就是乘batc_size
    eval_loss += loss.item() * label.size(0)
    _, pred = torch.max(out, 1)
    #统计这一批次中正确预测的个数
    num_correct = (pred == label).sum()
    eval_acc += num_correct.item()
print('Test Loss: {:.6f}, Acc: {:.6f}'.format(
    eval_loss / (len(dataset_test)),
    eval_acc / (len(dataset_test)))
)


#绘制损失函数曲线
epoch_range = range(epoch)
plt.figure(1)
plt.plot(epoch_range, loss_log)
plt.show()

训练集损失函数曲线:
在这里插入图片描述
训练30轮后的训练集损失函数为0.0011,测试集损失函数为0.0256,测试集准确率为0.992.
在这里插入图片描述

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码) 阅读详情

相关推荐

机器学习-卷积神经网络(CNN)

交叉熵损失用于评估预测概率分布与实际标签分布之间的差异。对于一个多分类问题,交叉熵损失 ( L ) 的定义为:( C ) 是类别数。( y_i ) 是实际标签的指示函数。如果样本属于第 ( i ) 类,则 ( y_i = 1 ),否则为 ( 0 )。( \hat{y}_i ) 是模型对第 ( i ) 类的预测概率。均方误差 ( L ) 定义为:( N ) 是样本数量。( y_j ) 是真实值。( \hat{y}_j ) 是预测值。

qq_42538588的博客 7436

labels.size(0) 是什么意思

我不明白这条线labels.size(0)

linhaogao的博客 3277

CV_ImageClassification:基于Pytorch的图像分类代码

Classification This repository mainly includes Code for image classification 这个库的内容是基于Pytorch框架实现的图像分类代码 AlexNet VGG ResNet (include Saliency Map)

多分类问题代码

MNIST图像分类代码

BKXjilu的博客 1077

DBCNN:使用深双线性卷积神经网络进行盲图像质量评估

DBCNN:使用深双线性卷积神经网络进行盲图像质量评估

用树莓派Pico低成本更新USB-C PD控制器固件实战指南

固件更新是嵌入式系统开发与维护中的核心环节,它直接决定了硬件设备的功能、性能与兼容性。其原理通常是通过特定的通信接口(如SWD、JTAG、UART或USB)与设备内部的Bootloader建立连接,将新的程序代码安全写入非易失性存储器。在USB Power Delivery(PD)和Type-C生态中,固件更新技术尤为重要,它能修复协议握手Bug、适配新设备并提升供电策略的灵活性。本文聚焦于一个典型的工程实践场景:如何利用广泛普及且成本极低的树莓派Pico开发板,作为USB-C协议到I²C协议的转换桥,实现

weixin_27869497的博客 461

Pytorch学习笔记(三) 图像分类器&数据并行处理

一、图像分类器 1.加载并处理输入数据 通常来说,处理图像、文本、语音或者视频数据时,可以使用标准 python 包将数据加载成 numpy 数组格式,然后将这个数组转换成 torch.*Tensor。 图像: Pillow,OpenCV 语音: scipy,librosa 文本: 可以直接用 Python 或 Cython 基础数据加载模块,或者 NLTK、SpaCy 几种常用数据集:CIFAR-10、ImageNet、MS-COCO、ImageFolder、LSUN Classificatio

Nismilesucc的学习札记 1481

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

前言 如果你想使用商业卫星的高分辨遥感影像,一般价格昂贵。我们可以使用地图平台上免费的高分辨率数据。目前数据源很多,比如说google earth、天地图、四维地球、必应地图等等。这些影像统一有一个共同点就是:RGB三波段;Web地图瓦片服务。这意味着我们可以通过瓦片服务下载影像,但下载的影像只有三个波段,分别是 一.引言 二、可使用高分辨率的地图数据源 1.Google Earth影像 2.Esri World Image 3.天地图 4.必...

锐多宝的地理空间 2万+

李宏毅2020机器学习深度学习(3) CNN卷积神经网络 笔记+作业

目录1. 背景知识1.1 CNN(卷积神经网络)结构介绍1.2 卷积层1.3 Pooling池化层1.4 经过一次卷积与池化的结果1.5 Flatten1.6 注意Filter的维度1.7 补充:1x1卷积1.8 CNN学到了什么2. 作业描述3. 数据预处理4. 在train set 上训练,参考val set上的结果调参5. 在总的训练集上训练 1. 背景知识 1.1 CNN(卷积神经网络)结构介绍 整体结构图如下所示: 输入数据(如一张图片)会经过许多卷积运算和Pooling池化层,最后拉平为一维再

梆子井欢喜坨的博客 5623

b站up“麦辣翅翅”《YOLOv8修改损失函数》问题解决RuntimeError: The size of tensor a (4) must match the size of tensor

b站up“麦辣翅翅”《YOLOv8修改损失函数》问题解决RuntimeError: The size of tensor a (4) must match the size of tensor ;TypeError: bbox_iou() got an unexpected keyword argument 'xywh‘

weixin_68331871的博客 3021

保姆级教程:用Python+Mediapipe实时捕捉手势,驱动Unity虚拟手模型(附完整源码)

本文详细介绍了如何利用Python的Mediapipe库和Unity实现实时手势识别与虚拟手模型驱动。通过OpenCV进行图像采集,Mediapipe提供21个手部关键点识别,结合UDP通信协议实现Python与Unity之间的低延迟数据传输。教程包含完整源码、环境配置、核心代码实现及性能优化技巧,适用于VR教育、游戏开发等需要自然交互的场景。

weixin_42531779的博客 362

【Geron-机器学习实战】学习笔记 3-卷积神经网络 CNN的基本介绍

CNN 卷积层 平移不变性,局部性 虽称为卷积,但用的是互相关运算(不翻转),而非信号处理中的卷积(翻转)概念 影响前向计算的所有可能输入区域称为感受野 填充(padding) 是在输入高宽两侧填充,通常为0,控制输出形状的减少量 步幅(stride) 是卷积核每次滑动的大小,使得输出形状成倍减少conv_valid = keras.layers.Conv2D( filters=1, kernel_size=kernel_size, strides=strides,

weixin_44211644的博客 2907

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1652

李宏毅机器学习笔记3——CNN(卷积神经网络)和RNN(循环神经网络)

卷积本质上是加权求和,信号处理过程中是时间上的加权求和,图像中是空间上的加权求和。

m0_63776870的博客 3565

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1292

ardupilot开发 --- Remote ID 篇

适配ardupilot的Remote ID模块研发,远程标识模块研发。Remote ID模块可以通过蓝牙或wifi向外广播无人机的状态信息、位置信息、任务信息等,并可以通过蜂窝数据向国家无人驾驶航空器一体化综合监管服务平台上报这些信息。Remote ID功能是21年起国家出台的民用无人机适航飞行的基本要求!

记录老板的每次pua,分享领导每天的毒鸡汤... 9607

李宏毅老师《机器学习》课程笔记-3卷积神经网络

介绍了深度学习在图像识别领域的应用—卷积神经网络。

宁萌Julie的博客 1343

配置 SAP Web Dispatcher 的实战指南:打通 SAP Fiori、SAP Gateway 与前端系统的关键一跳

SAP Web Dispatcher 在 Fiori 架构中扮演关键角色,作为统一入口处理 HTTPS 请求、实现安全代理和流量分发。它将分散在不同系统的访问路径统一收口,解决浏览器同源策略限制,集中管理 HTTPS 终止和客户端信息传递。典型配置中,Web Dispatcher 监听 443 端口,根据路径将 OData 请求转发至 Gateway 系统,静态资源请求送至前端服务器。SSL 相关配置(如 PSE 文件)确保安全通信,而路由规则(wdisp/system_xx)决定请求转发目标。实施时需注意

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 103

《Web安全之机器学习入门》笔记:第十七章 17.3 卷积神经网络CNN识别恶意评论

本小节通过CNN识别恶意评论,可以对比之前16.3章节做效果对比。从结果可知,CNN准确率为66.79%,根据之前章节16.3的测试结果NB仅49.37%,RNN是61.88%,稍微好点。本小节通过CNN识别恶意评论,可以对比之前16.3章节做效果对比。数据集按照6:4的比例生成训练集和测试集,源码如下。相关数据集处理方法可参考16.3节笔记。

mooyuan的网络安全博客 496

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

李宏毅机器学习笔记L3 卷积神经网络

自己的笔记留作备份,无参考价值

weixin_46524058的博客 500

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

机器学习笔记3 交通标志识别 CNN with Keras

这篇文章中,我们会利用简单的CNN来训练出一个可以识别交通标志牌的模型。 首先,我们需要有一些数据集合, 下载链接如下: datasets: training: https://btsd.ethz.ch/shareddata/BelgiumTSC/BelgiumTSC_Training.zip testing: https://btsd.ethz.ch/shareddata/BelgiumTSC...

CJQ0505的博客 3182

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[特殊字符] 终极机器学习实战指南:Hands-on ML3权威教程解析

**机器学习教程**是当今数据科学家和AI爱好者必备的学习资源,而Hands-on ML3项目正是这一领域的标杆之作。这个开源项目提供了完整的Python机器学习实践教程,通过Jupyter笔记本形式,系统讲解从Scikit-Learn到TensorFlow 2的全套技能。无论你是**机器学习入门**新手,还是希望提升技能的开发者,这个项目都能为你提供最实用的学习路径。 ## 📚 项目概述:什

gitblog_00152的博客 323

终极机器学习实战指南:19个Jupyter笔记本教你掌握Scikit-Learn、Keras和TensorFlow 2深度学习

你是否想快速掌握机器学习与深度学习的核心技术?🤔 **Hands-on ML3** 项目为你提供了最完整的实战教程!这个开源项目包含了19个精心设计的Jupyter笔记本,从机器学习基础到TensorFlow 2深度学习实战,手把手教你构建AI模型。无论你是初学者还是有经验的开发者,这个项目都能帮助你系统性地学习机器学习与深度学习技术。 ## 🚀 为什么选择Hands-on ML3项目?

gitblog_00937的博客 398

李宏毅2021机器学习课程笔记深度解析:从基础理论到前沿模型的全栈学习实战指南

例如,在讲解Self-Attention时,笔记清晰地展示了Query、Key、Value三个矩阵是如何通过矩阵乘法生成注意力分数的,这种“图解+公式+文字”的三维讲解方式,极大地降低了理解难度。然而,面对长达数十小时的视频内容,如何高效地提炼核心知识点、构建系统的知识体系,成为了许多自学者面临的难题。该项目不仅是对李宏毅2021春季机器学习课程的忠实记录,更是一份经过深度消化、结构清晰的学习指南,涵盖了从深度学习基础、卷积神经网络、自注意力机制到BERT、GPT-3等前沿大模型的全方位内容。

wulechun的博客 185

深度学习—卷积神经网络(CNN)全笔记,附代码

K近邻;神经网络基础,线性函数,损失函数,前向传播; 卷积神经网络,卷积网络与传统网络的区别,卷积层,卷积层涉及参数,池化层,最大池化,特征图的变化;经典网络Alexnet,经典网络—Vgg经典网络—Resnet,感受野; 项目实战—基于CNN构建识别模型一 项目实战—基于CNN构建识别模型二 图像识别实战常用模块解读...

weixin_58176527的博客 2万+

【人工智能与机器学习】基于卷积神经网络CNN的猫狗识别

卷积神经网络(Convolutional Neural Networks,简称CNN)是一种具有局部连接、权值共享等特点的深层前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一,擅长处理图像特别是图像识别等相关机器学习问题,比如图像分类、目标检测、图像分割等各种视觉任务中都有显著的提升效果,是目前应用最广泛的模型之一。

apple_52030329的博客 1万+
上一篇: OCR学习(2)CTPN学习
下一篇: 机器学习笔记(4)Pytorch学习
wyl2077
博客等级 码龄9年 37粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值