自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 qlineargradient中坐标的含义

emmmm最近用PyQt做项目的时候接触到了渐变色,感觉有点酷炫,就想着也整一波,但是转了几圈,看了挺多博客都没整明白qlineargradient里面的坐标和坐标后的数值是干嘛用的,后来看了几个别人的栗子,嗦嘎,原来如此。QSS代码如下: """ QWidget{ background: qlineargra...

2020-04-26 21:24:53 1221 1

原创 PyQt5 使用自定义ToolTip解决QTableWidget数据显示不全问题

目录问题描述解决方案实现效果问题描述最近在使用PyQT5做一个项目,用到最多的控件是QTableWidget,使用很方便,但是也存在很多问题,比如下面这种:数据太长,使用QTableWidget默认的列宽分配会导致显示不全,数据以"XXX..."的形式呈现,很不利于用户阅读。一个可能的解决办法是采用用户可以手动调整的方式来显示数据。效果如下图:使用的代码是...

2020-04-10 17:08:20 8595 3

原创 Python+selenium+phantomjs解决alert弹窗和confirm弹窗问题

phantomjs因为是无界面的,无法处理动态js渲染的alert弹窗,因此无法使用常规的switch_to_alert()来处理弹窗,否则将会报错。查阅资料发现其实phantomjs自带了处理弹窗的API,这里只需要在selenium中的调用phantomjs自带的API就行。browser = webdriver.PhantomJS(executable_path = os.p...

2019-12-30 22:29:05 621

原创 PyQt5中QComboBox实现多选功能

网上大佬太多了,写的啥没看懂,自己摸索着也写了个出来,也勉强能用。功能:QComboBox实现多选功能 返回选中的文本列表 一键全选和取消全选功能from PyQt5 import QtCore, QtGui, QtWidgetsimport sysclass CheckableComboBox(QtWidgets.QComboBox): def __...

2019-08-12 17:30:16 6602 5

原创 通俗理解CNN感受野的计算方法

现在要计算输出的这个特征图上的每个点对应输入的6x6的图像上多大范围的像素点(感受野)。很直观的,输出的2x2图像上每个点来自于中间特征图的3x3区域。图片来自于https://paddlepedia.readthedocs.io/en/latest/tutorials/CNN/convolution_operator/Convolution.html。因此我们得到输出的2x2的特征图上的点对应于原始特征图上5x5范围的像素点,即感受野为5x5。那么中间的特征图上点影响多大范围的来自第一个特征图像素点?

2023-05-03 20:42:07 932 1

原创 理解机器学习中常见参数估计方法

其核心思想是当求解MLE算法或MAP算法的过程中依赖于某些不可观测的隐变量。分别表示抛了若干次硬币之后观察到的正面朝上和反面朝上的次数。假设每次抛硬币的过程是条件独立的,且符合(0-1)分布。其核心思想是在极大似然估计(MLE)算法的基础上,假设参数。的分布为常数分布时,最大后验概率估计等价于极大似然估计,即。由于P(D) 是已知的观测分布可以忽略,因此。这符合我们的认知,概率值近似等于频率。例如,假设抛硬币正面朝上的概率值。重复2,3过程,直到收敛。, 反面朝上的概率值为。

2023-04-23 14:59:43 371

原创 Ubuntu 无法在安装新的版本前,为 ./usr/bin/strings 做一个符号链接备份..Operation not permitted

有一天ubuntu服务器开机一直卡在登录界面,密码输入正确但是反复出现登录界面就是进不去,推测可能是ubuntu-desktop软件出了问题,于是在重装ubuntu-desktop过程中提示要安装binutils依赖,但是在安装binutils一直提示标题展示的错误,即做符号链接备份时提示。经过以上步骤,系统中的chattr和lsattr文件应该已经被修复了,下面使用类似的方法更改安装软件过程中遇到的障碍,例如我的服务器报文件权限错误的是。chattr指令用于设置文件属性,‘+’选项,将给文件添加属性;

2023-02-17 16:28:35 522 1

原创 搭建Pytorch 和 Tensorflow v1 兼容的环境

Github 上很多大牛的代码都是Tensorflow v1 写的,比较新的文章则喜欢用Pytorch,这导致我们复现实验或者对比实验的时候需要花费大量的时间在搭建不同的环境上。这篇文章是我经过反复实践总结出来的环境配置教程,亲测有效!

2022-10-30 22:06:57 1610

原创 通俗理解拉普拉斯算子(Laplace)

中心点为负数,上下左右都是正数,经过Laplace算子处理后 (对应位置相乘再相加),如果中心的上下左右都是有灰度变化的,那么判定该中心点位于边缘内,那么经此处理后,边缘中心的灰度值会变小,而周围上下左右灰度值不变,因而最后输出的图像中,只有边缘周围上下左右部分的灰度值被保留,而边缘部分则趋于0或等于0 (小于0的部分会被截断为0),因此需要变号 (公式中令c = -1) ,即从原图中减去Laplace算子处理后的图像,使得边缘中心的灰度值变大,而边缘周围的灰度值减少,就表现为原图中的边缘

2022-10-17 16:23:20 11742 3

原创 Pytorch 计算模型复杂度 (Params 和 FLOPs)

Pytorch 计算模型复杂度 (Params 和 FLOPs)

2022-10-17 12:32:41 2194

原创 理解Separable Convolution

普通Convolution layer 会构造输入图像的各通道加权值 N 次得到N 维的feature map 输出 (卷积核的数量,也就是输出的feature map的维度) ;而Separable Convolution layer 只构造输入图像各通道加权值1 次(Depwise Convolution),然后用不同的比例 (权值) 构造feature map N次得到N 维的feature map 输出 (PointWise Convolution)......

2022-07-17 17:47:23 207

原创 Python获取文件名和文件类型

Python获取文件名和文件类型

2022-06-08 15:26:41 1307

原创 通俗理解深度学习梯度累加(Gradient Accumulation)的原理

首先你得明白什么是梯度,可以看我之前写的一篇博客 :微分与梯度的概念理解本质上,梯度是一种方向导数,是一个矢量,因此这里的梯度累加并不是简单的相加,而是类似于初高中物理学的力的合成,梯度作为一种方向导数(矢量)的其累加的效果就是将各个小的梯度合成为一个指向Loss function 最终优化方向的梯度。这里结合代码理解一下:正常训练的过程for i, (images, labels) in enumerate(train_data): # 1. forwared 前向计算 ou

2022-05-28 12:35:20 2072 6

原创 Tensorflow 1.x 和 Pytorch 中 Conv2d Padding的区别

Pytorch中Conv2d的Padding可以是整数,二元组,字符串三种形式。整数(int)。如果输入的padding为整数则代表在 上,下,左,右 四个方向都充填一样数量的0或者由padding_mode 确定的padding类型。二元组(tuple)。如果输入的padding 为二元组(padding[0],padding[1]),则padding[0]代表上下两个方向的padding大小,padding[1]则代表左右两个方向的padding大小。字符串(str)。字符串模式可选参数为

2022-03-24 13:25:13 2085

翻译 TensorFlow v1 入门教程

目录Tensor计算图Eager modeTensorboardSave and Restore模型保存模型恢复tensorflow v2 版本现在已经全面用keras 封装了,运行时甚至都不用显式地建立计算图,然后再调用session.run() 了,对刚入门人工智能的人来说很是友好了。但是我想说,github上,包括很多以前大牛们的论文的代码实现不都还是用的v1 版本的tensorflow 写的吗???连tensorflow 的session 都抛弃了,让人读大牛们的论文的时候那叫一个抓狂,所以下定决

2022-03-23 17:26:32 1868 4

原创 理解WGAN 和 Spectral Normalization(归一化)

传统的Gan存在的问题传统的判别器损失maxD V(D,G)=Ex∼Pr(x)[log D(x)]+Ez∼Pg (x)[log(1−D(x))](1)\hspace{2em}\mathop{max}\limits_{D}\space V(D,G) = \mathbb{E}_{x\sim P_{r}(x)}[log\space D(x)] + \mathbb{E}_{z \sim P_g \space (x)}[log(1-D(x))] \hspace{4em}(1)

2022-03-09 12:12:32 804

原创 理解原始Gan Loss 和 Hinge Gan Loss

原始Gan LossminG maxD V(D,G)=Ex∼Pdata[log D(x)]+Ez∼Pz (Z)[log(1−D(G(Z)))]\mathop{min}\limits_{G}\space \mathop{max}\limits_{D}\space V(D,G) = E_{x\sim P_{data}}[log\space D(x)] + E_{z \sim P_z \space (Z)}[log(1-D(G(Z)))]Gmin​ Dmax

2022-03-04 16:16:02 4627 4

原创 详解pytorch fold和unfold用法

先上结论,conv = unfold + matmul + fold. 即卷积操作等价于,先unfold(展开),再执行矩阵乘法matmul,然后再fold(折叠)。具体过程如下:unfold函数将一个输入Tensor(N,C,H,W) 展开成 (N,C * K1 * K2, Blocks),其中kernel形状为(K1,K2),总的Block数为Blocks。即把输入的Tensor根据kernel的大小展开成Blocks个向量。Block的计算公式如下:Blocks=Hblocks×WblocksB

2022-02-25 14:38:39 3127

原创 微分与梯度的概念理解

微分一元函数的微分定义式如下:dy=f′(x)∗dxdy=f'(x)*dxdy=f′(x)∗dx即 垂直变化量 = 斜率(导数) * 水平变化量微分的含义:用一个线性函数的变化来逼近任意可导函数的变化梯度梯度是一个矢量,是多元函数在某一点处的偏导数构成的矢量。例如,令 z = f(x,y),则z在点p(x,y)处的梯度为 :▽f(x,y)=gradf(x,y)=(∂f∂x,∂f∂y)▽f(x,y) = gradf(x,y) = (\frac{\partial f}{\partial x

2022-02-21 14:26:24 2207

原创 直观理解Dilated Convolution

Dilated Convolution是一种通过增加kernel元素间距(padding 0)使得感受野增加的一种卷积方式。所谓感受野就是特征图上每个点对应原图像的像素范围。这样,在不改变kernel size(上图中的kernel size还是3x3)的情况下,增加了感受野。也可以理解为kernel size从3x3 变成了5x5(但是只有原来的3x3的位置有权值,其余位置均为0),Dilated Conv的kernel计算公式如下:k′=k+(k−1)(d−1)k'=k+(k-1)(d-1)k

2022-02-20 20:57:29 1624

原创 直观理解Transpose Convolution

首先,先上结论,Transpose Convolution 可以看成是在原始input的基础上做padding之后的常规Convolution. 所以常规的Convolution的计算性质也适用于Transpose Convolution.需要特别注意的是,Trans Conv中的stride和常规Conv的stride有点不太一样的是,常规Conv的stride是对kernel的移动步长,而Trans Conv的stride是对输入input元素间的间隔。常规的Conv 以及其对应的Trans Conv

2022-02-20 13:32:03 923

原创 KL散度与交叉熵概念辨析

KL散度深度学习中,常用KL散度衡量两个数据分布之间的差异,KL散度越小,则表示两个数据分布之间的差异越小。一般以 P(x) 表示样本的真实分布,Q(x)作为模型预测的分布。例如,在一个三分类任务中,x1,x2,x3分别表示猫、狗和马。若一张猫的图片的真实分布P(x)=[1,0,0],而预测分布为Q(x)=[0.7,0.2,0.1],则对应的KL散度计算如下:交叉熵在介绍交叉熵之前,首先补充一下以下重要概念:信息量设某一事件发生的概率为P(x),则其信息量表示为:...

2022-01-21 21:30:01 3426

原创 关于图像傅里叶变换得到的频谱图的通俗理解

傅里叶变换过程:经过傅里叶变化且频谱居中化处理的频谱图:1.如果将图像某一行上的灰度变化看作是一个离散信号,那么整张图像可以看作是一个分布在二维平面上的信号,因此图像可看作是空间域信号。傅里叶变换则是将图像灰度分布(空间域信号)变换到了频域上,给我们提供了观察图像的另一个视角。2.图像的频谱图(频谱居中后)的中心点是频率最低点,以该点为圆心,不同半径的上的点表示不同的频率。这里的图像频率是指对应原图像中的某灰度曲线变化的快慢(这么说不严谨,但是按照上面第1点的角度,似乎也可以这么理解

2022-01-20 14:58:55 19015 7

原创 辨析Iteration、epoch及batchsize之间的关系

区别Iteration: 是指跑完一个batch,更新了一次参数叫做一次Iterationepoch: 是指跑完一整个Dataset里的所有batch之后,累计更新了len(datasets)/batchsize次参数之后叫做一个epoch.总Iteration的计算公式如下:...

2021-12-29 17:39:20 388

原创 C语言内存对齐规则及计算公式详解

32位系统中,cpu按块大小读取内存,每个块的大小为4字节(64位系统是8字节)。而在C语言中自定义的数据类型(例如结构体)占用的内存大小可能不满足4或8的整数倍,则会出现同一变量需要两次读取才能读完的情况,所以往往采用内存对齐来提高访问效率(以空间换时间)。内存对齐规则对于结构体类型数据:1.结构体内的第一个变量的地址偏移量为02.结构体内的第二个变量的起始地址要为该变量类型大小的整数倍与对齐模数比中的最小值(系统默认的对齐模数比可使用#pragma pack(show)语句查看,也可

2021-12-04 17:23:29 1929

原创 深度学习笔记——卷积层和池化层的一些“冷门”小知识点

一.卷积层的定义和计算1.卷积层的定义卷积层 = 感受野 + 权值共享每一个感受野( receptive field) 内会有多个filter,而每个filter的参数设置都不一样(一般随机初始化后,由神经网络自主学习得到)。每个filter负责侦测该感受野内出现的某种特征(pattern),而同样的特征可能会在图像的其他位置重复出现,因而同一张图片的不同区域需要同样的一组filter来侦测,即权值共享(Parameter Sharing),以实现filter的高效复用及参数量的缩减...

2021-11-25 18:53:56 891

原创 C语言数据结构笔记——查找算法

#include<iostream>#include<vector>using namespace std;typedef struct{ int length; vector<elem> e;}SStable;typedef struct{ int key;}elem;//无序表上的顺序查找int unSq_search(SStable ST,int key){ int i = ST.length; .

2021-09-20 20:35:18 87

原创 C语言数据结构笔记——一次搞定十大排序算法

准备工作定义一个基础的交换函数swapValue()和打印函数output()以便于后续排序函数的调用。#include<iostream>#include<Windows.h>using namespace std;void swapValue(int &a , int &b);void output(int arr[],int len);void swapValue(int &a , int &b){ int.

2021-09-20 19:59:47 314

原创 C++打印完全二叉树

思路:完全二叉树可以采用数组顺序存储,而且除最后一层外其余各层都是满的。则可以采用逆序打印的方式,先确定最底层的节点位置及数目,进而确定其上各层的节点位置。打印效果代码实现#include<iostream>#include<stdlib.h>#include<string>#include<vector>#include<cmath>#include<time.h>#include<exceptio

2021-09-15 17:30:56 820

原创 使用setuptools+Pyinstaller+Setup Factory打包Python应用程序避免踩坑超详细教程(可安装和卸载)

工具准备 工具名 版本号PyInstaller 4.0.dev0+3e6f7dc709setuptools 41.0.1Setup Factory 7.0前两个工具为Python的包,可以直接通过以下命令直接安装:pip install pyinstaller==4.0.dev0+3e6f7dc709pip install setupto...

2021-03-22 18:25:04 1995 2

原创 sqlite3.OperationalError: near “?“: syntax error的一种可能的解决办法

当我尝试用下面这句SQL代码查询数据库中的一个表格中的"Course data"和“Titile_list”字段对应的数据时,报了"sqlite3.OperationalError: near "?": syntax error "的错误,但是看了半天也没看出这句SQL代码哪里有问题。 # SQL查询语句 SQL = "SELECT COURSE_DICT,TITLE_LIST FROM ? WHERE STU_ID =?" arg = (table_name,stu_id)# 执

2021-02-04 17:56:04 15389 2

原创 Keras实现简单字母加数字类型的验证码识别

文章目录验证码识别模型数据资料模型搭建过程代码1. 数据加载及可视化2. 构建数据字典3. 分割验证码4. 划分训练集和测试集5. 模型搭建6. 模型配置7. 模型训练8.模型预测及评估9. 模型调用10. 可视化验证码识别结果11. 模型保存12. 模型加载13. 模型二次调用验证码识别模型数据资料资料百度云地址提取码:fwil模型搭建过程代码1. 数据加载及可视化from matplotlib import pyplot as plt import numpy as npimport p

2021-02-02 15:53:35 342 1

原创 ImportError: `load_weights` requires h5py when loading weights from HDF5.

Windows中可通过以下命令解决该问题:pip install --upgrade tensorflowpip intsall --upgrade h5py若已安装Anaconda,则可以使用以下命令:conda upgrade tensorflowconda upgrade h5py导致ImportError: `load_weights` requires h5py when loading weights from HDF5.问题的原因可能是tensorflow的版本和h..

2021-01-28 19:03:53 5644

原创 PyQt5中自定义QWebEngineView的右键菜单

实现代码@author: daimashiren@time: 2021/01/20# -*- coding: utf-8 -*-import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtWebEngineWidgets import QWebEngineView,QWebEngineSettingsfrom PyQt5.QtWidgets import QMenu, QWidget.

2021-01-20 17:09:44 1796

原创 Numpy中np.indices函数用法详解

np.indices官方文档定义如下:def indices(dimensions, dtype=int, sparse=False): """ Return an array representing the indices of a grid. Compute an array where the subarrays contain index values 0, 1, ... varying only along the corresponding axis..

2020-12-15 17:05:37 16194 1

原创 Numpy中reshape和resize的区别

区别:np.reshape()作用是将原来的数组变换形状,不改变数组元素数量,要求更改后的数组元素总数不变。 np.resize()作用是改变数组的大小和形状,会改变数组元素数量,如果更改后的数组元素比原数组的多,则用原数组中的元素充填补齐。实例:In:import numpy as npa = np.arange(9)b = np.reshape(a,(3,3))c = np.resize(a,(5,5))print(b)print()print(c)Out:原数组:

2020-12-14 20:26:36 1505

原创 Numpy中关于np.rollaxis和np.swapaxes的理解

numpy.rollaxis(arr, axis, start)arr:数组 axis:要滚动的轴,其它轴的相对位置不变 start:默认为零,要滚动到目标位置。举例说明:>>> a = np.ones((3,4,5,6))>>> np.rollaxis(a, 3, 1).shape #把数组a的3轴滚动到1轴位置,其他轴相对位置相对不变(3, 6, 4, 5)>>> np.rollaxis(a, 2).shape .

2020-12-14 18:47:33 3344

原创 Numpy中数组的广播机制总结

Numpy中的对于数组间的算术运算采用“元素一 一对应”的计算机制,因而一般要求两个数组的形状相同才能进行数组间的算术运算,但是在某些情况中,Numpy中允许符合一定规则的不同形状的数组进行算术运算。广播的核心规则如下:两数组的后缘维度轴长度相同(满足低维数组是高维数组的某一内层元素,低维数组才能被拓展成和高维数组一样的形状) 两数组的后缘维度中有任意个长度是1或缺失 输出数组的形状是输入数组形状的各个维度上的最大值上面的规则可能看起来比较难懂,简单来说就是低维数组要想被拓展成和高维数组一样的形状

2020-12-12 10:46:59 381

原创 Numpy多维数组的点乘规律总结

Numpy中数组的点乘用函数dot()来实现,而单个*则表示的是数组对应元素的乘法。一维情况:In:a = np.array([1,2,3])b = np.array([1,2,3])print(a.dot(b))Out: 14一维数组点乘相当于向量乘法,计算结果为一个数(标量),注意要是等长的一维数组才能点乘二维情况:In:a = np.array([[1,2,3], [1,2,3]])b = np.array([[1,2,3],

2020-12-10 20:29:09 7154

原创 Numpy数组拼接总结

方法一:Numpy中使用级联函数concatenate()来连接两个数组,可选参数为连接轴(连接维度) axis,axis默认为0,即默认在第0维上进行元素的连接。级联函数使两数组指定维axis上的对应位置的元素相连接,若指定axis大小而时同维度上元素个数对应不相同时将会报错! 指定不同axis所得到的新数组形状不同注:Numpy中维度从第0维开始方法二:使用堆栈函数stack()来连接数组,可选参数仍为连接轴axis,axis默认大小为0。使用堆栈函数stack()连接数组与..

2020-11-30 21:41:37 5071 1

空空如也

空空如也

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

TA关注的人

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