![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
十年磨一剑
月下花弄影
登山,高一步则多一层境界
展开
-
python中图像读取,操作和保存的四种库函数:plt, cv2, pil, skimage
本文主要介绍python中四种读取,操作和保存图像的库函数。分别是:matplotlib.pyplot. 简称为plt。可以用于论文画图,类似于matlab的作图工具。保存图像很方便。官方例子地址。cv2。是opencv的python版本,有众多的图像处理函数。读取图像很方便。官网地址PIL.Image, 简称为pil。是一个比较方便的库,pytorch中有直接接口用于交互,因此对于pytorch用户来说,这是一个很好的选项,在自己的程序中尽量使用这个函数来进行操作。它也提供众多的图像处理函数。可以原创 2020-08-02 11:08:48 · 1264 阅读 · 0 评论 -
pytorch保存和加载模型的两种方式
pytorch中保存和加载模型是绑在一起的。这里我需要注意一下不同的保存方式对应不同的读取方式,两者各有利弊。首先说说pytorch.save()这个函数,可以参考官网:pytroch.save。简而言之,这个函数可以保存任意的东西,比如tensor或者模型,或者仅仅是模型的参数。如果将保存对象局限在模型上,通常来说我们有两种方式:直接保存所有的模型,只保存模型中的参数(模型结构就保存了)。以下分别说说两种不同的方式。为了说明,我们先建立一个简单的模型。import torchimport t原创 2020-06-22 21:09:01 · 8455 阅读 · 0 评论 -
机器视觉中的特征提取【0】:什么是特征提取,特征提取有什么作用?
1.什么是特征提取?特征提取的英文叫做feature extractor,它是将一些原始的输入的数据维度减少或者将原始的特征进行重新组合以便于后续的使用。简单来说有两个作用:减少数据维度,整理已有的数据特征。这里我给一个例子来解释特征提取的第二个作用。那就是我们很熟悉的奖学金评定,我们知道学生的文化课成绩,道德分数,以及各种其他竞赛的成绩。摆在奖学金评定委员会面前的任务就是如何知道一个学生是否...原创 2019-12-09 14:39:49 · 40747 阅读 · 9 评论 -
python中如何使用None增加数据维度
这里,我想说关于数据维度我们要注意两个东西。当我们进行切片操作时,我们的数据维度时丢失的。这一点要格外注意。有时候我们希望数据保持一定的维度,但是数据不变,这是可以实现的。且不同的平台或者库函数都有不同的方式,我们这里使用none来表示。首先说明第一点,切片操作时,我们的数据维度丢失了,如下图所示。其次我们可以使用none来增加维度,还可以将其和切片操作合并起来。虽然数据维度在变化,...原创 2019-12-04 15:11:57 · 2498 阅读 · 0 评论 -
深度学习中batch size 和 learning rate有什么关系?
参考文章链接参考文章题目:One weird trick for parallelizing convolutional neural networks具体可看第5页中。一般来说,我们batch size 大一些,则learning rate也要大一些。且有一个数学关系。假设别人最优的结果是这样的:batchsize=batch1batch size = batch_1batchsize...原创 2019-11-18 13:49:11 · 11550 阅读 · 2 评论 -
【feature extractor 系列文章2】ZFnet 论文阅读Visulaizing and Understanding Convolutional Networks
AlexNet比其他算法结果好很多,但是为什么会好这个问题却并没有回答,而本篇论文就试图解释这个原因。在理解了原因之后,进而提出一个新的模型去进一步提高模型的能力。首先,这篇论文开启了可视化的先河。使用到了两个方法:1)多层反卷积网络,multi-layered deconvolutional network (deconvet)2)对输入图片进行遮挡,然后看分类器对遮挡的敏感程度,进而看出...原创 2019-11-14 19:52:05 · 279 阅读 · 0 评论 -
GAN 对抗生成网络中什么是模式倒塌mode collapse?
本篇博文讲讲对抗生成网络中的模式倒塌问题,可以讲,这个问题是我们生成网络的重要难题之一。实际上,我觉得在我们人类的学习过程中也会出现类似的情况。在GAN中,有一个生成器,还有一个判别器,生成器就是生成图片或者其他的什么,而判别器就是帮助生成器不断变好。有人将生成器和判别器理解成造假钞和辨别假钞的。两者的能力都互相增长。刚开始生成器并不好,假钞一点也不像真的,这时候判别器很轻松的就知道了假钞是假...原创 2019-11-06 20:24:21 · 7668 阅读 · 0 评论 -
GAN:如何求Discriminator辨别器纳什均衡?(绝对简单,只要懂得基本求导)
本文讲讲如何求解GAN(生成对抗)网络中Discriminator的纳什均衡点。在看GAN相关的理论文章时,经常会被某些表达和理由给卡住。本文试图解决其中一个。先抛出问题:在GAN第一篇论文中,说纳什均衡点是D输出总是0.5,这个0.5是怎么得到的?在一些文章中,有如下图这样的公式,如何理解?:其实,这两个表达比较类似。以下正文:先说明将会用到的参数的含义:xxx 表示输入...翻译 2019-02-25 17:44:45 · 6322 阅读 · 4 评论 -
吴恩达 最新课程AI for everyone 第三周 Building AI in your company 笔记
翻译 2019-03-05 16:32:48 · 370 阅读 · 0 评论 -
吴恩达 最新课程AI for everyone 第一周 what is AI 笔记
翻译 2019-03-02 21:12:46 · 1416 阅读 · 0 评论 -
python+ assert 断言两个向量的所有元素相等
a = [0, 2, 3]b = [0, 2, 3]assert all(a[i] == b[i] for i in range(len(a))), 'They aren\'t always equal'b = [0, 2, 2]assert all(a[i] == b[i] for i in range(len(a))), 'They aren\'t always equal'原创 2019-05-06 13:33:43 · 3569 阅读 · 0 评论 -
基于pytorch 的 orthogonal_regularization(正交规范化)实现
认为参数需要满足一定条件,希望卷积层参数是正交的。如果不是正交的,计算与正交之间的距离,然后作为损失进行优化。本程序给出了orthogonal regularization的pytorch的实现,直接返回模型的损失。import torchdef orthogonal_regularization(model, device, beta=1e-4): r""" au...原创 2019-02-19 14:15:03 · 7079 阅读 · 7 评论 -
一图归纳三大种类矩阵范数:诱导范数,元素范数,Schatten范数,涵盖谱范数,2范数
原创 2019-02-24 13:43:54 · 8998 阅读 · 4 评论 -
pytorch中(函数名有下划线和没有下划线)clamp和clamp_的区别
在pytorch中,我们需要注意,对于tensor的操作时候是in-place类型。in-place类型是指,但在一个tensor上操作了之后,是直接修改了这个tensor,还是返回一个新的tensor,而旧的tensor并不修改。pytorch中,一般来说,如果对tensor的一个函数后加上了下划线,则表明这是一个in-place类型如:clamp 和 clamp_ (以下为实际例子)...原创 2019-02-08 22:08:56 · 8717 阅读 · 4 评论 -
如何进行 batch normalization 2d 的计算?
Batch Noramlization 基本算是深度学习的标准配置了。原文链接在看文章时,关于如何计算有一点疑惑。虽然就是上面这个公式,但是这个均值和方差到底是啥,或许有人和我一样还是有一点疑惑。准确来说,这个均值和方差的维度是什么?以二维batch Normalization 为例,结合 pytorch 程序,本文说一下相关内容。pytorch的 Batch Normalizati...原创 2019-02-14 17:13:11 · 5338 阅读 · 10 评论 -
【已解决】Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same
在运行torch中出现这个错误。错误内容大概就是指输入类型是CPU(torch.FloatTensor),而参数类型是GPU(torch.cuda.FloatTensor)。关于数据类型的链接:官方链接首先,请先检查是否正确使用了CUDA。通常我们这样指定使用CUDA:device = torch.device("cuda" if torch.cuda.is_available() el...翻译 2019-01-21 15:13:02 · 147018 阅读 · 43 评论 -
torch 梯度计算出现错误a leaf Variable that requires grad has been used in an in-place operation和梯度NoneType问题
在计算梯度时可能会出现两个主要错误a leaf Variable that requires grad has been used in an in-place operation.unsupported operand type(s) for *: ‘int’ and ‘NoneType’在CS231n的assignment3 中我们会对卷积可视化,其中一个就是fooling image。...原创 2019-01-15 15:23:11 · 7151 阅读 · 1 评论 -
吴恩达 最新课程AI for everyone 第二周Building AI project笔记
翻译 2019-03-03 14:44:38 · 607 阅读 · 0 评论 -
一个2层隐层神经网络解决抑或问题
使用2层隐层,使用sigmoid和ReLU激活。import numpy as npimport matplotlib.pyplot as plt%matplotlib inlineinput = np.array([[0, 0], [0, 1], [1, 1], [1, 0]]) # 4 * 2target = np.array([0, 1, 0, 1]).reshape(4, 1...原创 2019-04-04 15:04:24 · 683 阅读 · 0 评论 -
【feature extractor 系列文章1】Alexnet 论文阅读ImageNet Classification with Deep Convolutional Neural Networks
本系列论文阅读总结主要专注于特征提取模型。本篇博客主要讲述第一篇卷积神经网络——AlexNet。原文链接原文名为:ImageNet Classification with Deep Convolutional Neural Networks鄙人也是深度学习方面半路出家,这篇发表于2012年的论文以前也没有亲自读过,只是通过一些课程和与人交流了解了一些,难免有点拾人牙慧的嫌疑。事实证明也确实...原创 2019-10-11 17:23:42 · 560 阅读 · 0 评论 -
torch.stack 和 torch.cat 错误:argument 'tensors' (position 1) must be tuple of Tensors, not Tensor
本篇博文介绍pytorch中一些函数的输入问题,主要是tensor 和 tensors的区别。在pytorch中我们也有对一个数据的叠加:pytorch.stack ,这个函数可以在数据叠加的同时,扩展数据维度。比如说我们把三个数叠加到一起,可以组成一个二维的矩阵,得到的二维矩阵可以是[1, 2],也可以是[2, 1]。pytorch.cat,这个函数是直接把两个数据连接起来,维度是不变的。...原创 2019-09-03 07:06:03 · 21061 阅读 · 1 评论 -
论文阅读与机制理解pix2pix: Image-to-Image Translation withConditional Aversarial Networks
L2和L1损失,用来减少生成图像和目标图像像素之间的距离,这会导致图像模糊(实验结果就表明L1生成的图像像素值处于中间水平),因为这样的损失函数通过对所有可能的输出像素值的平均来减少像素之间的距离。从数学上来说,在-1到1范围内,L1损失是比L2损失要偏大的,那么L1的平均效果应该比L2的要大,也就可以推测L1会比L2更加模糊,但这与他们的结果相反,不知我错在何处?L1和L2损失可以用来将生成...原创 2019-07-10 17:17:09 · 607 阅读 · 0 评论 -
深度学习(GAN)中concatenate 和 add的区别
在深度学习中,有时候我们会涉及到两个特征结合,在使用卷积情况下就涉及feature map的结合。一般情况下,feature maps的结合有两种方法,一种是元素对应相加,简称add,另一种就是把特征图堆到一起来,简称concatenate。以下先详细说一下怎么操作。假设feature map 1 的维度为B1∗C1∗H1∗W1B_1*C_1*H_1*W_1B1∗C1∗H1∗W1, ...原创 2019-06-07 16:14:02 · 8072 阅读 · 0 评论 -
【python】频域滤波
频域滤波主要分为四个步骤1)计算源图像的傅里叶变换结果2)选择并计算滤波器3)将1得到的结果和2的结果相乘4)对3的结果进行逆傅里叶变换本文提供所有资源下载(自带图片):下载地址结果展示:代码1:计算滤波器import numpy as npdef high_pass_filter(img, radius=80): r = radius rows, co...原创 2019-05-29 17:25:29 · 6651 阅读 · 4 评论 -
Pytorch的add_param_group使用说明
这个可以用来冻结某些参数,也可以用来指定参数的学习import torchimport torch.optim as optimw1 = torch.randn(3, 3)w1.requires_grad = Truew2 = torch.randn(3, 3)w2.requires_grad = Trueo = optim.Adam([w1])print(o.param_gr...翻译 2019-05-15 15:09:11 · 7948 阅读 · 2 评论 -
python + assert 如何断言两个高维(包括二维)矩阵中每一个元素都相等
在上一篇博客,我实现了如何断言一个向量相等这篇博客,其实一模一样,将一个高维矩阵变成一个向量之后再利用上次的方法就可以了。其实,断言向量,也就是将向量变成一个个数就行了。这是不变的原理。import numpy as npa = np.zeros((3, 4))b = np.zeros((3, 4))a = a.flatten()b = b.flatten()assert al...原创 2019-05-06 13:34:20 · 1184 阅读 · 0 评论 -
【pytorch+全连接层】mnist分类问题【尽可能的高准确率,99%以上】
要求使用pytorch,使用全连接层,而不是用卷积层,要求有两层隐含层尽可能提高准确率本博客要求使用GPU,否则CPU可能需要半天时间才能运行出来结果要求下载CSV格式的mnist数据(可以在我上一篇博客里面下载)注意:全连接层也是可以将准确率训练到99%以上的,不要以为只有卷积层才可以。毕竟mnist是一个简单的数据集。在上一篇博客中,我用纯python写了mnist的分类,在小...原创 2019-04-19 08:40:24 · 5963 阅读 · 2 评论 -
【python】利用两层神经网络(网络必须用类)来训练mnist数据(要求准确率90%以上)
要求:用python自建一个class类,不能使用其他高级库函数,如pytorch,tensorflow,含有两个隐含层,隐含层数量可以指定。准确率达到90以上。画出学习曲线:损失曲线核准确率曲线。本程序在jupyter下完成。共三个代码:程序可直接下载(包含数据)下载地址1.主代码(自建类函数)import numpy as npimport matplotlib.pyplo...原创 2019-04-15 20:19:13 · 1701 阅读 · 0 评论 -
【已解决】Ubuntu系统安装或升级 nvidia 驱动后出现的重复登录,黑屏,分辨率无法上调的现象
在升级或安装nvidia驱动后,有可能出现很多问题。包括:重复登录,黑屏,屏幕分辨率无法上调的现象。这极有可能是驱动不合引起的。提醒大家,在选择合适的 nvidia 驱动时,需要慎重。一般来讲,根据推荐来选择驱动,但是我们还是会失败。我这次是ubuntu18.04系统,TITAN V显卡,官方推荐使用方式如下:可以使用命令查看:ubuntu-drivers devices。我这里推...原创 2019-04-02 16:14:07 · 1034 阅读 · 0 评论 -
【细节讲解】GAN: walking in latent space 如何探索潜在空间?结合DCGAN论文
结合DCGAN论文,本博客旨在讲解如何探索潜在空间。在DCGAN中,我们利用噪声 zzz 产生图片。我们想探索噪声对最终图片的影响,并且试图证明GAN网络并不是简单的记住了训练样本。这个噪声 zzz 所在的空间就是所谓的潜在空间。看到DCGAN原文的人,一定知道怎么探索,那就是利用插值的方法。**但是如何插值呢?**本博客就是手把手教你如何插值。从理论到代码。1.怎么做插值?随机噪声 z...原创 2019-01-14 14:55:08 · 9680 阅读 · 4 评论 -
ConvTranspose2d原理,深度网络如何进行上采样?
在生成图像中,我们需要不断的扩大图像的尺寸。目前在深度学习中,ConvTranspose2d是其中一个方法。在DCGAN(Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)(原文地址)中就是用这个来实现的。别名:convTranspose2d 是pytor...原创 2019-01-11 15:53:33 · 111568 阅读 · 75 评论 -
python+opencv均值滤波,高斯滤波,中值滤波,双边滤波
滤波算法主要包括均值滤波,高斯滤波,中值滤波和双边滤波。 每种算法都有自己的特点,建议从原理上了解每种算法的优缺点。上图给出简洁版的总结。 以下是代码:import numpy as npimport cv2import matplotlib.pyplot as plt######## 四个不同的滤波器 #########img = cv2.imread('cat...原创 2018-06-26 23:05:30 · 81247 阅读 · 24 评论 -
python+opencv自建二维滤波器进行卷积滤波
#! usr/bin/env python# coding: utf-8######## 自己创建一个二维卷积滤波器(5*5) #########import numpy as npimport cv2import matplotlib.pyplot as pltimg = cv2.imread('cat.jpg',0)kernal = np.ones((5,...原创 2018-06-26 23:00:32 · 3685 阅读 · 2 评论 -
python+opencv 利用canny进行边缘检测
# usr/bin/env python# coding:utf-8# 利用canny函数进行边缘检测# 2018年7月8日08:03:24import cv2import numpy as npimport matplotlib.pyplot as pltimg = cv2.imread('line.jpg',0)edges = cv2.Canny(img,100,...原创 2018-07-08 11:57:43 · 2055 阅读 · 0 评论 -
python中比较大小的三目运算法及其嵌套使用
C++中的三目运算符十分方便,可以用来简化代码。 其实python中也有,用得好可大量减少代码。 以下正文。 代码用于将一个数限制0到10之内。#! usr/bin/env python# coding: utf-8# 2018年6月25日22:27:05# 为了了解python中的三目运算符,以简化程序,并且进行嵌套使用# 将一个从键盘读入的数限制在[0, 10]内# 如...原创 2018-06-25 22:43:02 · 1804 阅读 · 0 评论 -
python+opencv图像变换的两种方法cv2.warpAffine和cv2.warpPerspective
# usr/bin/env python# coding: utf-8##################### 对图像进行变换(旋转)# 2018年6月17日07:33:54import cv2import numpy as np# 这里说一下旋转的opencv中为旋转提供的三个要素# 旋转的中心点(center)# 旋转角度()# 旋转后进行放缩# 我们可以通过...原创 2018-06-17 19:20:16 · 31725 阅读 · 7 评论 -
python+opencv 自适应阈值算法
简单阈值算法使用全局阈值,但一副图像中不同位置的光照情况可能不同,全局阈值会失去很多信息。本文介绍一下python+opencv中自适应阈值算法。 同样的,先列出大纲 以下直接比较两个自适应阈值算法与简单阈值算法。###########自适应阈值算法#! usr/bin/env python# coding: utf-8import matplotlib.pyplot as pl...原创 2018-06-24 16:20:53 · 6654 阅读 · 2 评论 -
python+opencv 简单阈值算法
本文先了解一个简单阈值函数,以了解一个阈值算法的具体参数。 然后比较不同阈值函数的区别。同样的,先用一副图说明本文重要大纲: #! usr/bin/env python# coding: utf-8import cv2img = cv2.imread('cat.jpg')img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 先将图像矩阵进行...原创 2018-06-24 16:13:52 · 2841 阅读 · 0 评论 -
python+opencv:定义放缩图像尺寸的三种方法:元组,源图像,系数
# usr/bin/env python# coding: utf-8# 2018年6月15日23:29:13# 2018年6月16日10:16:49# python_5import cv2import numpy as npimg = cv2.imread('cat.jpg')# 对图像进行放缩# 第一种方法:直接指定使用元组指定新图像的尺寸resImg1 =...原创 2018-06-16 14:19:57 · 5036 阅读 · 0 评论 -
你是如何抵抗工作学习时犯困的?希望这里有适合你的方法
高中时,同桌格言是:死后必将长眠,生前何必久睡。虽然很牵强,但是不得不说,在这个20多岁奋斗的日子里,周公是我们进步道路上一个拦路石。我们总是很缺觉,总要有些方法去解决,去面对这个情况。这里,我将想睡觉的问题分为三大类,然后分别针对每种特殊情况去解决。实际上,某些有特殊贡献的人,每天只睡5个小时,甚至更少。不过我觉得这是需要一定的天赋的。确实没睡够,比如每天睡觉不足6到7个小时;确实睡够了,比如睡...原创 2018-06-02 11:42:41 · 1156 阅读 · 3 评论