python
基于python的开发
FPGA硅农
数字IC设计,FPGA开发
展开
-
onnxruntime推理
这里以pytorch平台和mobilenet v2网络为例,给出模型的训练过程。原创 2023-06-21 13:45:00 · 742 阅读 · 0 评论 -
【图像处理】sobel边缘检测的实现
python实现的sobel边缘检测原创 2022-02-11 13:50:33 · 4478 阅读 · 0 评论 -
Yolo4-Tiny代码解读
本文参考代码链接代码yolo4-tiny的整体结构,如下图所示从图中可以看到,yolo4 tiny大致可以分为以下几个模块:1.CSPDarknet53-tiny,是整个网络的backbone2.FPN3.yolo head下面分别作一介绍:CSPDarknet53 tiny由3个BasicConv块和3个Resblock_body块构成。BasicConv比较简单,其实就是一个卷积+BN+LeakyReLU的结构,代码如下所示:class BasicConv(nn.Module):原创 2022-01-19 20:34:34 · 8416 阅读 · 4 评论 -
【深度强化学习】DDPG算法
算法描述DDPG算法共有4个网络,两个策略网络μ\muμ和μ′\mu^{'}μ′,它们可以根据输入状态确定地输出动作,额外加上一个噪声NtN_tNt;两个critic网络Q和Q′Q和Q^{'}Q和Q′,它们可以根据输入向量[s,a],输出相应的Q值。同时,和DQN一样,DDPG中也引入了experience buffer的机制,用于存储agent与环境交互的数据(st,at,rt,st+1,done)(s_t,a_t,r_t,s_{t+1},done)(st,at,rt,st+1,done),原创 2021-12-16 19:58:23 · 2680 阅读 · 1 评论 -
【深度强化学习】Actor-Critic算法
Actor-Critic算法回顾策略梯度算法:Actor-Critic算法的区别就是对R(τn)R(\tau^n)R(τn)进行了修改。当R(τn)R(\tau^n)R(τn)具有上述三种形式时,便是经典的AC算法,在AC算法,我们通过另一个叫做Critic的神经网络来估计Vπ(st)V^{\pi}(s_{t})Vπ(st)(或其他,视具体情况而定)。本博客实现的便是基于TD残差的AC算法,其策略网络的梯度如下图所示相应的Actor和Critic损失函数为:这里ei=rtn+Vπ(st原创 2021-12-16 16:57:16 · 2603 阅读 · 0 评论 -
【深度强化学习】Policy Gradient算法
Policy Gradient算法TrajectoryTrajectory表示一个回合的状态-动作序列,记为τ\tauτ,其发生的概率记为pθ(τ)p_{\theta}(\tau)pθ(τ),计算公式如上图所示。Policy Gradient我们希望通过最大化下图中的Expected Reward,来进行策略的学习。其梯度计算如下:因此我们可以设计下图所示的损失函数,其中θ\thetaθ为策略神经网络的参数,其输出为每个动作的概率值改进一考虑到R(τn)R(\tau^n)R(τn)原创 2021-12-16 13:08:07 · 1824 阅读 · 0 评论 -
【深度强化学习】DQN
算法描述中文描述代码# -*- coding: utf-8 -*-# import the necessary packagesimport torchimport torch.nn as nnfrom torch.autograd import Variableimport torch.nn.functional as Fimport numpy as npimport gym# 1. Define some Hyper ParametersBATCH_SIZE = 32原创 2021-12-15 21:40:52 · 1282 阅读 · 0 评论 -
【强化学习】Sarsa(Lamda)算法
算法描述代码实现import numpy as npimport pandas as pdimport timeN_STATES = 25 # the length of the 2 dimensional worldACTIONS = ['left', 'right','up','down'] # available actionsEPSILON = 0.7 # greedy policeALPHA = 0.8 # learning rateGAMMA = 0原创 2021-12-15 18:54:12 · 185 阅读 · 0 评论 -
【强化学习】Sarsa算法
Sarsa算法对比 Sarsa 和 Q-learning 算法,可以参见链接代码import numpy as npimport pandas as pdimport timeN_STATES = 25 # the length of the 2 dimensional worldACTIONS = ['left', 'right','up','down'] # available actionsEPSILON = 0.7 # greedy policeALPHA =原创 2021-12-15 16:51:18 · 858 阅读 · 0 评论 -
【强化学习】之Q-Learning
问题描述如图所示,从左上角出发,每次只能往上下左右四个方向移动1个单位,要求设计一个路径,尽可能避免红色障碍,到达蓝色方格处。首先,我们将问题抽象化,25个方格位置分别编号为0-24,表示25个状态,上、下、左、右为四个动作,如下图所示:奖赏机制def get_init_feedback_table(S,a): tab=np.ones((25,4)) tab[8][1]=-10;tab[4][3]=-10;tab[14][2]=-10 tab[11][1]=-10;tab原创 2021-12-15 14:47:05 · 583 阅读 · 0 评论 -
LSTM的Pytorch实现
import torchimport torch.nn as nnimport torch.optim as optimimport torchvisionfrom torchvision import transformsclass Rnn(nn.Module): def __init__(self, in_dim, hidden_dim, n_layer, n_classes): super(Rnn, self).__init__() self.n_.原创 2021-12-05 16:38:06 · 1529 阅读 · 0 评论 -
【数字图像处理】频域低通滤波
代码思想:将图像进行FFT变换后,把DC分量移到图像中心,然后截取中间HxW的小矩阵(低频分量)import torchimport torch.fftimport torch.nn.functional as Fimport matplotlib.pyplot as pltimport numpy as npfrom PIL import Imageimport torch.nn as nnclass SpectralPooling(nn.Module): def __init原创 2021-11-16 16:09:39 · 1273 阅读 · 0 评论 -
3D卷积的GEMM+IM2COL实现
由于pytorch官方的API torch.nn.unfold仅支持二维图像(四维输入张量)的im2col操作,因此,使用GEMM+IM2COL来高效的计算3D卷积并非易事,经过搜索,找到了github上一个很不错的unfold操作实现,它不仅支持4维输入张量的im2col,还支持3、5维张量的im2col,这里给出该仓库的链接使用该第三方库的方法也很简单,只需通过import unfoldNd语句导入即可以下为使用该第三方库实现的基于GEMM+im2col的3D卷积:import原创 2021-11-05 12:32:14 · 937 阅读 · 0 评论 -
Pytorch实现Warm up + Cosine Anneal LR
Warm upwarm up是深度学习炼丹时常用的一种手段,由于一开始参数不稳定,梯度较大,如果此时学习率设置过大可能导致数值不稳定。使用warm up有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳,其次也有助于保持模型深层的稳定性。Cosine Annealimport matplotlib.pyplot as pltimport mathimport torchfrom torchvision.models import resnet18...原创 2021-11-04 16:38:42 · 3627 阅读 · 7 评论 -
PyTorch实现Vision Transformer
ViT详解参见博客blog以下分别是模型代码和训练代码:ViT.py# !/usr/bin/env python# -*- coding:utf-8 -*-import torchfrom torch import nn, einsumimport torch.nn.functional as Ffrom einops import rearrange, repeatclass Residual(nn.Module): def __init__(self,原创 2021-09-10 20:03:01 · 1640 阅读 · 3 评论 -
python einops张量操作工具包
eniops是python提供的一个对张量维度进行随心所欲操作的包,具有十分强大的功能,下面就让我们来见识一下eniops的强大表达能力。rearrange具有交换张量维度的功能,下面的例子将C,H,W方式存储的图片转化为H,W,C的存储方式import torchfrom einops import rearrangex=torch.rand((10,3,224,224))print(x.size())x = rearrange(x, 'b c h w ->b h w c'原创 2021-08-30 22:49:44 · 2293 阅读 · 4 评论 -
基于pytorch的花卉识别小程序
通过迁移学习,以VGG16为基础,对有5种类型的花卉数据进行训练,训练完后,保存模型参数,然后用Pyqt5简单实现了一个小程序。代码:predict.py(加载模型参数,对输入的图片进行预测,给出类别和概率)import torchimport numpy as npimport matplotlib.pyplot as pltimport torchvision.models as modelsimport torch.nn.functional as Fdef imshow(imag原创 2021-08-12 19:53:28 · 2087 阅读 · 2 评论 -
Pytorch迁移学习---训练花卉数据集
什么是迁移学习(Transfer Learning)迁移学习,简单的理解就是使用一些已经训练好的模型迁移到类似的新的问题进行使用,而不必对新问题重新建模,从头训练和优化参数。这些训练好的模型同时包含了优化好的参数,在使用的时候只需要做一些简单的调整就可以应用到新问题中了,可以说,迁移学习在某种程度上是站在了巨人的肩膀上。本文使用已经训练完成的VGG16模型,固定特征提取层的参数,对分类层稍作修改,然后进行训练,训练过程仅更新分类层参数,采用的数据集则是有5个类别的花卉数据集,下图是花卉数据集的目录:原创 2021-08-12 15:39:37 · 1499 阅读 · 1 评论 -
Pytorch数据集加载---DataLoader和Dataset
DataLoader 和 Dataset神经网络训练的第一步往往是数据集的加载和处理,当然,我们可以自己手动完成,但这也往往给我们带来了诸多的不便,尤其是当数据集比较大的时候,比如shuffle操作,batch操作等等,甚至更加高级的图片预处理操作。幸运的是,pytorch为我们提供了用于数据加载和处理的DataLoader和Dataset类,Dataset是一个包装类,用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。Da原创 2021-08-12 12:18:38 · 743 阅读 · 0 评论 -
pytorch中requires_grad=false却还能训练的问题
在pytorch中,requires_grad用于指示该张量是否参与梯度的计算,我们可以通过如下方式来修改一个张量的该属性:tensor.requires_grad_() //True or False然而,本人在写代码的过程中发现,在搭建完一个网络之后,打印所有参数的requires_grad属性,结果显示全为false,但训练时loss损失函数却能下降,令人百思不得其解,代码和打印输出的结果如下:class Net(nn.Module): def __init__(self):..原创 2021-08-12 00:26:28 · 9182 阅读 · 6 评论 -
Pytorch--自己动手实现模型剪枝
pytorch剪枝尽管Pytorch自带了剪枝的工具,但是其在灵活性上终究敌不过自己手写的剪枝代码,以下就是博主模型剪枝的一次简单尝试。代码:import torch.nn as nnimport torchimport torch.nn.functional as Ffrom torch import optimfrom torchvision import datasets,transformsfrom torch.utils.data import DataLoaderdevice原创 2021-07-15 01:05:24 · 5936 阅读 · 9 评论 -
FFT实现卷积运算
2D卷积的实现:import numpy as npdef fft_conv(x,weight,padding,stride): x_padded=np.pad(x,((padding,padding),(padding,padding))) h_pad,w_pad=x_padded.shape kx,ky=weight.shape weight_padded=np.pad(weight,((0,h_pad-kx),(0,w_pad-ky))) x_ffted=n原创 2021-07-14 09:29:40 · 2088 阅读 · 3 评论 -
Pytorch GCN入门
实验环境pytorch1.7.1 ,cu101和torch-geometric,其中torch-geometric是pytorch的一部分,使用它可以很方便的进行有关图神经网络的训练和推理,安装过程略,torch-geometric的详细信息可参见官方文档链接简单GCN的搭建图数据的表示图(Graph)是描述实体(节点)和关系(边)的数据模型。在Pytorch Geometric中,图被看作是torch_geometric.data.Data的实例,并拥有以下属性:以及更详细的,可以参考博客原创 2021-07-08 18:31:30 · 1345 阅读 · 0 评论 -
多边形向内收缩指定距离的实现
import mathimport numpy as npdef calc_cos_angle(a,b): #计算两个向量的夹角余弦 inner_ab=a[0]*b[0]+a[1]*b[1] abs_a=math.sqrt(a[0]**2+a[1]**2) abs_b=math.sqrt(b[0]**2+b[1]**2) return inner_ab/(abs_a*abs_b)def calc_point(p1,p2,p3,d):原创 2021-07-07 00:28:59 · 1022 阅读 · 1 评论 -
启发式算法(蒙特卡洛算法和差分进化算法)解决设计空间搜索问题
要求解的问题python代码import numpy as npimport randomK=3S=1N=64M=128R=32C=32PE=220 #DSP数量B=50000 #片上存储器容量def objfunc(Tn,Tm,Tr,Tc): Tload=max(Tn*(S*Tr+K-S)*(S*Tc+K-S),Tn*Tm*K*K) Tstore=Tr*Tc*Tm Tco原创 2021-06-11 14:55:18 · 492 阅读 · 0 评论 -
python log日志模块的使用
log1,log2,log3log1,log2,log3log1,log2,log3分别对应三种实现方式,其中log1log1log1的实现比较简单,但是使用不便,尤其是需要在多个地方调用且写入同一文件的时候,log2,log3log2,log3log2,log3则使用对象实现,方便在多个地方调用,且演示了如何同时向控制台和文件输出,以下是简单的示例代码:import loggingimport os.pathimport timedef log1(): logging.basicConf原创 2021-05-24 10:19:33 · 240 阅读 · 0 评论 -
python多进程
import mathimport datetimeimport multiprocessing as mpdef f(x, y): for i in range(10000000): pass return x+yif __name__ == '__main__': param_dict = zip(list(range(100)), list(range(100))) print(param_dict) start_t = da原创 2021-05-10 22:30:02 · 152 阅读 · 0 评论 -
Winograd算法的python实现
算法介绍F(m∗m,r∗r)F(m*m,r*r)F(m∗m,r∗r):一个(m+r−1)∗(m+r−1)(m+r-1)*(m+r-1)(m+r−1)∗(m+r−1)的输入特征图和一个r∗rr*rr∗r的卷积核进行2d卷积得到m∗mm*mm∗m的输出,若采用直接卷积,则需要m2r2m^2r^2m2r2个乘法,而若采用winograd算法,则乘法数量减少为(m+r−1)∗(m+r−1)(m+r-1)*(m+r-1)(m+r−1)∗(m+r−1),具体计算过程如下:其中,g为r∗rr*rr∗r的卷积核,d原创 2021-05-09 13:02:56 · 1369 阅读 · 5 评论 -
qt designer入门
由ui文件转化而来的py文件:# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'untitled.ui'## Created by: PyQt5 UI code generator 5.15.2## WARNING: Any manual changes made to this file will be lost when pyuic5 is# run again. Do not ed原创 2021-03-13 14:53:40 · 190 阅读 · 0 评论 -
pytorch实现DenseNet
Dense详解链接代码:DenseNet.pyimport torchimport torch.nn as nnfrom collections import OrderedDictclass _DenseLayer(nn.Sequential): def __init__(self, in_channels, growth_rate, bn_size): super(_DenseLayer, self).__init__() self.add_mod原创 2021-02-21 17:42:13 · 388 阅读 · 0 评论 -
pytorch实现GoogleNet
GoogleNet的inception模块如图所示:代码:import torchimport torch.nn as nnfrom torch.nn import functional as Fdef conv_relu(in_channel, out_channel, kernel, stride=1, padding=0): layer = nn.Sequential( nn.Conv2d(in_channel, out_channel, kernel, str原创 2021-02-20 00:39:48 · 243 阅读 · 0 评论 -
pytorch实现ResNet50
ResNet50的结构如下:主干部分可分为4个stage,这4个stage主要由以下两个stem构成:如上图所示,这两个stem分别叫做残差块和下采样块。而Input stem的结构如下图所示:下面是具体的代码:import torchimport torch.nn as nnfrom torch.nn import functional as Fclass ResNet50BasicBlock(nn.Module): def __init__(self, in_channe原创 2021-02-19 19:01:02 · 3593 阅读 · 5 评论 -
基于KL散度的INT8训练后量化
我们知道,P,Q两列数据的相对熵越小,那么P,Q分布越接近,用Q近似P损失的信息就少,英伟达的INT8量化就是基于这个原理,下面是量化过程相对熵的计算。(未完,打算复现这个int8量化)import mathimport numpy as npimport matplotlib.pyplot as pltdef create_bin(data,num): #将[data.min,data.max] num等分,统计每个子区间内的数据个数 data_max=max(data)原创 2020-11-08 12:58:32 · 3071 阅读 · 1 评论 -
用神经网络进行多元非线性函数的拟合
import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plttrain_feature=np.zeros((10000,2))train_label=np.zeros((10000,1))x=np.linspace(-np.pi,np.pi,100)y=np.linspace(-np.pi,np.pi,100)for i in range(100): for j in range(100):原创 2020-11-07 18:10:55 · 5215 阅读 · 1 评论 -
python调用外部可执行文件的三种方法
首先用c语言编写一个简单的计算阶乘的程序,代码如下:#include<stdio.h>int main(int argc,char *argv[]){ //计算n的阶乘 int i=0,j; int sum=0; int base=0; int product=1; char* str=argv[1]; if(argc!=2) printf("argument is not right\n\r"); printf原创 2020-11-06 18:55:50 · 2853 阅读 · 0 评论 -
Geopandas对地图文件按区域进行分割并统计
import numpy as npimport matplotlib.pyplot as pltfrom shapely.geometry import Polygonimport geopandas as gpdimport mathdef make_mesh(box,w,h): #按照w,h对box进行网格划分 [xmin,ymin,xmax,ymax]=box list_x=np.arange(xmin,xmax,w) list_y=np.arange(ymin,原创 2020-11-06 11:25:49 · 3458 阅读 · 0 评论 -
python进行网格分割
import numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as mpathesfrom shapely.geometry import Polygondef make_mesh(box,w,h): #按照w,h对box进行网格划分 [xmin,ymin,xmax,ymax]=box list_x=np.arange(xmin,xmax,w) list_y=np.arange(ymin原创 2020-11-06 08:50:00 · 5312 阅读 · 0 评论 -
python中配置文件的读取
首先在config.ini中写入如下内容[Mysql-Database]host=localhostuser=rootpassword=123456db=testcharset=utf8[Email]host=http://mail.qq.comaddress=234567@qq.compassword=123456然后编写python读取该配置文件import configparsercf = configparser.ConfigParser()cf.read("F:\原创 2020-11-05 17:43:39 · 347 阅读 · 0 评论 -
PyQt5使用下拉形式的复选框
from PyQt5.QtWidgets import QComboBox, QListWidgetItem, QListWidget, QCheckBox, \ QApplication, QVBoxLayout, QWidget,QPushButton,QHBoxLayoutimport sysclass ComboCheckBox(QComboBox): def __init__(self,parent,items): super().__init__() self.pa原创 2020-11-03 19:07:53 · 1533 阅读 · 2 评论 -
PyQT信号与槽
信号与槽机制是PyQT中的一大特色,信号用于发射信号,而与之绑定的槽函数在接受到信号之后便开始执行。先来看一个最简单的例子import sysfrom PyQt5.QtWidgets import QMessageBox,QPushButton,QApplication,QWidgetapp=QApplication(sys.argv)widget=QWidget()def showMsg(): QMessageBox.information(widget,'信息提示框','Ok 弹原创 2020-11-02 13:48:05 · 284 阅读 · 0 评论