自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(888)
  • 资源 (2)
  • 收藏
  • 关注

原创 pytorch查看网络模型变量以及对应的尺寸

pytorch查看网络模型参数

2022-07-16 12:08:02 2171 2

原创 Pytorch中的repeat以及repeat_interleave用法

Pytorch中的repeat用法

2022-07-11 12:19:58 5055 2

原创 Python中中文和负号的显示

这个问题已经遇见过很多次了,但是每次都要搜一下,写个博客记录一下~import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号...

2022-05-31 19:56:53 1139

原创 基于torch.nn.functional.conv2d实现CNN

在我们之前的实验中,我们一直用torch.nn.Conv2D来实现卷积神经网络,但是torch.nn.Conv2D在实现中是以torch.nn.functional.conv2d为基础的,这两者的区别是什么呢?torch.nn.Conv2D源码如下:torch.nn.Conv2dCLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=T

2022-02-06 17:05:02 1829 1

原创 Pytorch(八) --Pytorch实现多分类问题

所谓的多分类问题,实际上是使用了softmax函数,这一点和tensorflow是有区别的。tensorflow中的softmax和交叉熵函数是分开的,而pytorch是合并到一起的。对mnist数据集使用多分类,代码如下:import torchfrom torchvision import transformsfrom torchvision import datasetsfrom torch.utils.data import DataLoaderimport torch.nn.funct

2022-01-22 13:32:47 1082 1

原创 Pytorch(七) --加载数据集

主要用到了Pytorch中的Dataset和DataLoadder这两个方法,其中Dataset是抽象类,不能实例化对象,只能继承用于构造数据集,DataLoader是帮助加载数据的,可以做shuffle、batch_size,能拿Mini-batch进行训练。代码如下:import torch import numpy as npfrom torch.utils.data import Datasetfrom torch.utils.data import DataLoaderclass D

2022-01-22 10:43:04 1289

原创 Pytorch(六) --处理高维特征数据

本次的实验,就类似于神经网络中的全连接神经网络,这是用来处理高维数据的。神经网络共3层;第一层是8维到6维的非线性空间变换,第二层是6维到4维的非线性空间变换,第三层是4维到1维的非线性空间变换。代码如下所示:#准备数据集xy = np.loadtxt('E:\\tmp\\.keras\\datasets\\diabetes.csv\\diabetes.csv',delimiter=',',dtype=np.float32)x_data = torch.from_numpy(xy[:,:-1])

2022-01-21 11:57:08 1598 1

原创 Pytorch(五) --逻辑回归

逻辑回归本质上也是线性回归,只不过是在输出的时候加入了一个sigmoid函数映射。线性回归是用来预测,逻辑回归是用来分类。Loss函数采用的是二分类的交叉熵,Pytorch中包含这样的一个方法,BCELoss。代码如下所示:#数据集准备x_data = torch.tensor([[1.0],[2.0],[3.0]])y_data = torch.tensor([[0.0],[0.0],[1.0]])#定义模型class LogisticRegressionModel(torch.nn.Mo

2022-01-20 13:07:30 587

原创 Pytorch(四) --基于Pytorch实现线性回归

每一次epoch的训练过程,总结下来就是:① 前向传播,求预测值。② 根据预测值和真实值求loss损失值③ 反向传播计算梯度④ 根据梯度,更新参数代码如下:# y = 3*xx_data = torch.tensor([[1.0],[2.0],[3.0]])y_data = torch.tensor([[3.0],[6.0],[9.0]])#设计模型class LinearModel(torch.nn.Module): def __init__(self):#构造

2022-01-19 19:23:37 807

原创 Pytorch(三) --反向传播

整体上来说,和上一节的梯度下降法差不多,不过这次是用Pytorch实现的,调用了其中的一些方法。需要注意的事项:①Tensor中包含data和grad,其中data和grad也是Tensor。在更新w.data时,也需要使用w.grad.data。②与Tensor做运算后得到的值,也是Tensor类型的。③l.backward()方法会把计算图中所有需要梯度的地方求出来,然后存到对应的参数中,最终将计算图释放。本次针对 y = w1*x^2+w2 *x+b,利用反向传播算法,求出近似的解。代码

2022-01-19 09:50:12 210

原创 Pytorch(二) --梯度下降法

针对y=wx+b,利用梯度下降法求得相对应的w和b,此时,w和b是一个近似解,而不是确切解。上图是针对y=wx的梯度下降法的步骤,y=w*x+b的步骤与之类似,只不过分为两步,w和b。代码如下所示:import numpy as npimport matplotlib.pyplot as plt#y = 2*x+3x_data = [1.0,2.0,3.0]y_data = [5.0,7.0,9.0]#随机初始化w和bw=1.0b=1.0lr = 0.01def forward

2022-01-17 18:16:41 2053

原创 Pytorch(一) --线性模型

最终还是要学Pytorch,Tensorflow也很好,不过对于做研究来讲,还是有些许的不足,这算是Pytorch的一个入门吧。针对y=w*x这样一个线性模型,利用穷举法去线性的模拟这个直线。虽然这一章并没有真的用到Pytorch的具体内容,不过这算是深度学习的一个入门。代码如下:import numpy as npimport matplotlib.pyplot as plt#y = 2*xx_data = [1.0,2.0,3.0]y_data = [2.0,4.0,6.0]def f

2022-01-17 12:00:16 2944 1

原创 深度学习之基于Tensorflow2.0实现Xception网络

1.Xception网络简介Xception网络是在2017提出的轻量型网络,兼顾了准确性和参数量,Xception----->Extreme(极致的) Inception。2.创新点引入类似深度可分离卷积:Depthwise Separable Convolution。为什么说是类似深度可分离卷积呢?1)深度可分离卷积的实现过程:2)Xception深度可分离卷积的实现过程:Xception的深度可分离卷积与传统的深度可分离卷积的步骤是相反的,但是原论文作者说,两者的性能差异不大

2021-11-22 20:58:03 2809 2

原创 python实现Matlab中的circshift函数

circshift是Matlab中矩阵循环移位函数,具体使用参照该链接。但是python中并没有封装好的该函数,因此需要自己实现。思路:将矩阵分为两部分,然后按照自己的需要堆叠在一起就可以了。np.vstack用在行的分割;np.hstack用在列的分割。## u代表原矩阵,shiftnum1代表行,shiftnum2代表列。def circshift(u,shiftnum1,shiftnum2): h,w = u.shape if shiftnum1 < 0:

2021-10-11 10:40:59 1688 1

原创 深度学习之基于Tensorflow2.0实现InceptionV3网络

Inception网络是Google公司研发的,迄今为止有V1,V2,V3,V4四代,在V4这一代引入了残差网络的模型,本次主要介绍第三代-InceptionV3网络。1. InceptionV3网络简介Inception第一次亮相是在 2014 年的 ILSVRC 比赛中,并且以 top-5 错误率(为 6.67% )略低于 VGGNet 的优势取得了第一名,这一代的Inception网络通常称为GoogleNet,也叫InceptionV1网络。InceptionV2与InceptionV3网络出现

2021-10-02 19:56:47 1125 1

原创 深度学习之基于Tensorflow2.0实现ResNet50网络

理论上讲,当网络层数加深时,网络的性能会变强,而实际上,在不断的加深网络层数后,分类性能不会提高,而是会导致网络收敛更缓慢,准确率也随着降低。利用数据增强等方法抑制过拟合后,准确率也不会得到提高,出现梯度消失的现象。因此,盲目的增加网络层数会适得其反,因此,ResNet(残差网络)系列网络出现了。本次基于Tensorflow2.0实现ResNet50网络。1.ResNet50网络简介ResNet50网络在层数上相比于VGG系列网络更胜一筹。这是何凯明在2015年提出的一种网络结构,获得了ILSVRC-2

2021-10-01 19:30:57 4102 4

原创 深度学习之基于Tensorflow2.0实现VGG16网络

VGG系列的网络,在网络深度上相比于其之前的网络有了提升,VGG16与VGG19是VGG系列的代表,本次基于Tensorflow2.0实现VGG16网络。1.VGG16 网络简介VGG16网络模型在2014年ImageNet比赛上脱颖而出,取得了在分类任务上排名第二,在定位任务上排名第一的好成绩。VGG16网络相比于之前的LexNet以及LeNet网络,在当时的网络层数上达到了空前的程度。2.网络结构3.创新点① 使用3x3的卷积核代替7x7的卷积核。3x3 卷积核是能够感受到上下、左右重点的

2021-10-01 18:53:35 3715 1

原创 深度学习之基于Tensorflow2.0实现AlexNet网络

在之前的实验中,一直是自己搭建或者是迁移学习进行物体识别,但是没有对某一个网络进行详细的研究,正好人工智能课需要按组上去展示成果,借此机会实现一下比较经典的网络,为以后的研究学习打下基础。本次基于Tensorflow2.0实现AlexNet网络。1.AlexNet 网络简介作为LeNet网络提出后的第一个比较成熟的网络,AlexNet不负众望的在2012年的ImageNet比赛中以远超第二名的成绩夺冠,使得卷积神经网络广受关注,它相比于VGG系列的网络,层数并不多,而且也没有Xception和Incep

2021-10-01 18:23:07 1726 1

原创 基于主定理以及递推树求解递归算法的时间复杂度

非递归算法的时间复杂度可以通过找到执行次数最多的代码,计算其执行次数即可。但是递归算法的时间复杂度则无法通过这种方式求得。有一种最简单的求递归算法的方式,即利用递推方法求解时间复杂度。如下所示:这种方法求时间复杂度很简单,但是可以如此简单的使用这种方法的情况很少,往往需要比较复杂的公式推导。因此利用这种方法求时间复杂度比较困难,需要利用别的方式进行求导。主要是以下两种方式:主定理、递推树。1.主定理递归算法的时间复杂度定义一般有如下形式:在大部分情况下,可以通过主定理,求解该问题的时间复杂度。

2021-09-22 21:50:21 5236 1

原创 深度学习之基于卷积神经网络实现超大Mnist数据集识别

在以往的手写数字识别中,数据集一共是70000张图片,模型准确率可以达到99%以上的准确率。而本次实验的手写数字数据集中有120000张图片,而且数据集的预处理方式也是之前没有遇到过的。最终在验证集上的模型准确率达到了99.1%。在模型训练过程中,加入了上一篇文章中提到的早停策略以及模型保存策略。1.导入库import numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltimport os,PIL,pathlib,war

2021-09-12 21:13:52 614 1

原创 基于python实现将一个文件夹中的图片移动到另一个文件夹

深度学习时,往往需要划分训练集、测试集以及验证集。在之前,我已经介绍了利用keras中的ImageDataGenerator方法实现数据集的划分。但是原文件夹中的数据,并没有真正的划分到两个文件夹中。这次介绍的这个方法,可以按照一定的比例或者数量将数据从一个文件夹移动到另一个文件夹。如下所示的文件夹:一共有24个子文件夹每个文件夹中有500张左右的图片。1.按照比例划分import os, random, shutildef moveFile(fileDir, tarDir): path

2021-09-08 17:09:10 5668

原创 深度学习之早停策略EarlyStopping以及保存测试集准确率最高的模型ModelCheckpoint

在训练神经网络时,如果epochs设置的过多,导致最终结束时测试集上模型的准确率比较低,而我们却想保存准确率最高时候的模型参数,这就需要用到Early Stopping以及ModelCheckpoint。一.早停策略之EarlyStoppingEarlyStopping是用于提前停止训练的callbacks,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。简而言之,就是可以达到当测试集上的loss不再减小(即减小的程度小于某个阈值)的时候停止继续训练。1.EarlyStop

2021-09-08 10:36:54 10596 3

原创 深度学习之基于InceptionV3实现水果识别

看了一下之前做过的有关深度学习的实验,发现InceptionV3这个模型还没有用到,虽然并没有自己实现该网络模型,但是先学习一下它的原理,再利用迁移学习测试一下它的模型准确率,也不失为一种不错的学习方法。本次实验利用InceptionV3网络模型,实现水果识别。1.导入库import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltimport os,pathlib,PILgpus = tf.config.ex

2021-09-06 19:03:36 1427 1

原创 深度学习之基于Xception实现四种动物识别

本次实验类似于猫狗大战,只不过将两种动物识别变为了四种动物识别。本文的重点是卷积神经网络Xception的实践,在之前的学习中,我们已经实验过其他几种比较常用的网络模型,但是Xception网络并未实践过。在弄本科毕设的时候,一个好朋友的毕设就是基于Xception实现海洋垃圾的识别,最终的实验效果达到了99%左右,由此可见Xception的模型性能还是不错的。本次实验基于Xception实现动物识别,最终的模型准确率在95%左右。1.导入库import numpy as npimport ten

2021-09-05 14:01:45 2043 4

原创 机器学习之决策树的原理及sklearn实现

1.概述1.1 决策树是如何工作的?决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。决策树算法的本质是一种图结构,我们只需要问一系列问题就可以对数据进行分类了。比如说,来看看下面这组数据集,这是一系列已知物种以及所属类别的数据:目标是,将动物们分为

2021-09-04 19:28:21 542

原创 深度学习之基于CNN实现汉字版手写数字识别(Chinese-Mnist)

Mnist数据集是深度学习入门的数据集,昨天发现了Chinese-Mnist数据集,与Mnist数据集类似,只不过是汉字数字,例如‘一’、‘二’、‘三’等,本次实验利用自己搭建的CNN网络实现Chinese版的手写数字识别。1.导入库import tensorflow as tfimport matplotlib.pyplot as pltimport os,PIL,pathlibimport numpy as npimport pandas as pdimport warningsfrom

2021-09-03 18:04:42 5080 6

原创 深度学习之基于卷积神经网络(VGG16)实现性别判别

无意间在kaggle上发现的一个数据集,旨在提高网络模型判别男女的准确率,博主利用迁移学习试验了多个卷积神经网络,最终的模型准确率在95%左右。并划分了训练集、测试集、验证集三类,最终在验证集上的准确率为93.63%.1.导入库import tensorflow as tfimport matplotlib.pyplot as pltimport os,PIL,pathlibimport pandas as pdimport numpy as npfrom tensorflow import

2021-09-02 18:17:29 2310 2

原创 机器学习之基于LeNet-5实现手写数字识别&&3折交叉验证

这是人工智能实验的最后一个实验,算是深度学习的“hello world”。经过之前的学习,利用LeNet-5实现手写数字识别已经不是难事,而且准确率极高。本次实验的主要目的就是引入了3折交叉验证,对比一下在不同的epochs、batch_size以及优化器下,模型准确率的变化。1.实验内容数据集:MNIST 数据集,60000 张训练图像,10000 张测试图像,每张图像size 为 28*28。利用 LeNet-5 CNN 框架,实现手写数字识别。2.实验要求利用交叉验证方法,分析识别结

2021-08-28 17:18:47 1784 3

原创 机器学习之基于SVM实现多类人脸识别

之前利用Fisher线性分类器实现过多类人脸识别,这次还是同样的数据集,利用SVM实现人脸识别。数据集如下所示:一共是40个人的人脸照片,每个人有10张图片。1.实验原理1.利用SVM实现人脸识别的结构如下所示:2.利用主成分分析 PCA 实现特征提取图像识别中,常常用矩阵来表示人脸图像。然而,高维图像数据对整个识别系统的识别速度有限的,也不利于实时识别系统的实现。降维技术是解决这一问题的常用方法,使数据从原始图像高维空间转化为维数大大减小的特征空间,同时,又保留原始图像数据的绝大部分信

2021-08-26 10:30:09 3085 1

原创 机器学习之感知器算法的设计实现(多分类)

本次实验旨在掌握感知器算法,利用它对输入的数据进行多类分类。1.实验原理1. 感知器基本原理感知准则函数是五十年代由 Rosenblatt 提出的一种自学习判别函数生成方法,由于Rosenblatt 企图将其用于脑模型感知器,因此被称为感知准则函数。其特点是随意确定的判别函数初始值,在对样本分类训练过程中逐步修正直至最终确定。用对所有错分样本的求和来表示对错分样本的惩罚,代价函数定义如下:显然,J≥0。当代价函数 J 达到最小值 0 时,所有的训练向量分类都全部正确。为了计算代价函数的最小迭代值

2021-08-25 13:31:37 1572

原创 机器学习之基于Fisher线性分类器实现多类人脸的识别

基于 ORL 人脸库,基于 Fisher 线性分类器实现多类人脸的识别问题。本次实验相比起之前的二分类人脸识别问题,复杂很多。而且程序的识别效果并不好,应该是程序本身的问题,各位路过的大佬仅当做参考,有不对的地方希望批评指正。本次实验实现的是基于Fisher线性分类器的人脸四分类问题。1.图像处理def Get_img(file_path): train_set = np.zeros(shape=[1,32*32]) # print(file_path) for filena

2021-08-24 10:01:44 2605

原创 机器学习之基于Fisher实现二分类的人脸识别

实验 2:基于 ORL 人脸库,实验样本主要来自于两个人,每人 45 张图片,共有 90 个样本,其中的 80 个样本作为训练样本,10 个作为测试样本。通过 LDA 实现两类问题的线性判别。一个Fisher线性分类器讲解的不错的博客:参考博客与上篇博客的基本内容相差不多,但是相比起上篇中的数据,本次实验多了对人脸数据的处理。def Get_img(file_path): train_set = np.zeros(shape=[1,32*32]) # print(file_path)

2021-08-22 21:26:38 841

原创 机器学习之Fisher线性分类器实现样本分类

本次实验是本科阶段人工智能实验课的一个实验,当时划水没有仔细做,现在回来再实践一下。1.Fisher分类器的基本原理若把样本的多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维。那么关键就是找到这条直线的方向,找得好,分得好,找不好,就混在一起。因此 Fisher 方法目标就是找到这个最好的直线方向以及如何实现向最好方向投影的变换。这个投影变换恰是我们所寻求的解向量 ,这是 Fisher算法的基本问题。样本训练集以及待测样本的特征数目为 n。为了找到最佳投影方向,需要计算出各类均值、样

2021-08-22 11:43:47 862

原创 深度学习之基于AlexNet实现猫狗大战

这次实验的主角并不是猫狗大战,而是AlexNet网络,只不过数据集为猫狗大战数据集。本次实验利用自己搭建的AlexNet网络实现猫狗大战,测试一下AlexNet网络的性能。AlexNet网络作为LeNet网络之后得到的网络模型,在很多地方都有了重大的创新,而这些创新就目前来看仍有重大的意义。1.创新点1.ReLU非线性函数(ReLU Nonlinearity)在AlexNet网络之前的网络模型中,大多采用sigmoid或者tanh作为激活函数,但是Alex(AlexNet网络的发明者)发现在训练时间

2021-08-18 16:21:14 1303

原创 深度学习之基于VGG16与ResNet50实现鸟类识别

鸟类识别在之前做过,但是效果特别差。而且ResNet50的效果直接差到爆炸,这次利用VGG16与ResNet50的官方模型进行鸟类识别。1.导入库import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltimport os,pathlib,PILfrom tensorflow.keras import layers,models,Sequential,Input,Modelfrom tensorflow.ke

2021-08-17 21:21:58 5706 3

原创 深度学习之基于LeNet-5实现cifar10的识别

Cifar10是一个封装好的数据集,里面包括10中类别的事物。而LeNet-5是最先提出来的卷积神经网络,在之前的学习中,我们并没有利用LeNet-5网络进行分类,本次实验我们来看一下基于Lenet-5对cifar10分类的效果。1.导入库import tensorflow as tfimport numpy as npimport os,PILimport matplotlib.pyplot as pltfrom tensorflow import kerasfrom tensorflow.

2021-08-16 18:34:50 2964 2

原创 深度学习之基于CNN和VGG19实现猫狗大战

猫狗大战在一开始接触深度学习的时候,实现过,也写过一篇博客。但是当时的理解并不是很深,在做过之前的实验之后,再次接触猫狗大战,就有一些别的体会了。本次实验基于自己搭建的CNN与VGG19的官方模型,实现猫狗大战。引入混淆矩阵与Accuracy_Loss图观察模型准确率。1.导入库import numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltimport os,pathlib,PILfrom tensorflow

2021-08-16 11:49:15 2912 2

原创 深度学习之基于DCGAN实现动漫人物的生成

注:因为硬件原因,这次的实验并没有生成图片,但是代码应该是没有问题的,可以参考学习一下。本次基于DCGAN实现动漫人物的生成。最终的效果可以参考大神K同学啊的博客。与上篇文章基于DCGAN生成手写数字的步骤基本一致。1.导入库import tensorflow as tfimport numpy as npimport glob,imageio,os,PIL,pathlibimport matplotlib.pyplot as plt# 支持中文plt.rcParams['font.san

2021-08-14 12:08:54 1894

原创 深度学习之基于DCGAN实现手写数字生成

该篇文章与上篇文章内容相差不多,但是主要的网络结构不同,上篇文章采用的是GAN网络结构,而这篇文章采用的是DCGAN网络结构。两者的差异在于以下几点:(1)使用卷积和去卷积代替池化层。(2)在生成器和判别器中都添加了批量归一化操作。(3)去掉了全连接层,使用全局池化层替代。(4)生成器的输出层使用Tanh 激活函数,其他层使用RELU。(5)判别器的所有层都是用LeakyReLU 激活函数。其中最本质的一点就是使用了卷积和去卷积。1.导入库import numpy as npimport

2021-08-12 20:55:08 609

原创 深度学习之基于GAN实现手写数字生成

在弄毕设的时候,室友的毕设是基于DCGAN实现音乐的自动生成。那是第一次接触对抗神经网络,当时听室友的描述就是两个CNN,一个生成一个监测,在互相博弈。最近我关注的一个大神在弄有关于GAN的东西,所以就跟着学了一下,蛮有意思的,和之前的深度学习略有不同。1.导入库import tensorflow as tfimport matplotlib.pyplot as pltimport numpy as npimport globimport sys,os,pathlib,imageio2.基

2021-08-11 18:15:20 4389 2

Chinese_Mnist数据集

众所周知,Mnist数据集是深度学习入门所需的数据集,但是Chinese_Mnist数据集可以作为前者的补充,在熟悉Mnist数据集后可以用来练手

2021-09-05

ch_photos.7z

一共13636张图片,适用于一般的车牌识别项目、课设、毕设等,内附有利用CNN实现车牌识别的模型可供大家参考

2021-09-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除