自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MLagents 多场景并行训练

关于的环境安装已经有了很多的blog和Video,本文针对的多场景的并行训练,以及在探索过程中出现的问题进行总结。

2023-07-27 22:28:07 470

原创 LeetCode第 85 场双周赛总结

LeetCode第85场双周赛总结

2022-08-23 20:26:16 245 1

原创 Leetcode第306场周赛(附数位DP总结)

LeetCode第306周赛,附数位DP学习总结

2022-08-18 20:33:00 400

原创 opencv项目实践三(文档矫正)

原始文档矫正后文档思路:只要获得倾斜文档的倾斜角度,然后通过仿射变化旋转一下就可以实现矫正了,这里获取倾斜角度的方法有两个,下面分别介绍1、利用霍夫变换,文档内容都是平行的,首先利用利用霍夫变换检测直线,然后将所有直线的平均倾斜角度当做文档的倾斜角度,最后再进行仿射变换就可以了。import cv2import numpy as npdef imshow(img): cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAll

2022-03-04 23:00:39 4259

原创 opencv项目实践二(银行卡卡号识别)

任务说明 给一张银行卡,识别银行卡上的卡号信息。输入一张图片,将4000 1234 5678 9010输出即可。实现一、思路定位银行卡上卡号所在区域,单独提取出来。定位卡号区域中的每个卡号数字,将每个卡号数字所在区域单独提取出来。通过模板匹配识别每个卡号数字。二具体代码实现1、因为要用到模板匹配,首先加载每个模板卡号模板# 读取模板图片img_m = cv2.imread("ocr_a_reference.png",1)img_m_g = cv2.cvtColor(img

2022-03-01 16:45:53 6113

原创 opencv项目实践一(答题卡识别)

2022-02-22 11:55:09 11455 11

原创 Anaconda的一些操作

1、关于虚拟环境比如创建一个名字为dppy37、python版本为3.7的一个虚拟环境conda create -n dppy37 python==3.7激活环境conda activate dppy37删除这个环境conda remove dppy37查看当前有多少个环境conda env list2、在pycharm中使用conda的虚拟环境选择Existing interpreter在interpreter中找到刚刚在虚拟环境中创建好的解释器应该是在 …Anaconda3

2021-12-06 13:01:47 122

原创 阿里源镜像安装Pytorch(cpu)

截止到2021 / 11 / 4,源链接可用pip install torch torchvision -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

2021-11-04 11:02:44 2158

原创 爬取豆瓣top250电影

爬取思路:1、使用selenium来获取页面源码,实现翻页功能。2、获取页面源码后可以获取每个电影对应页面的url。3、然后请求电影页面的url信息,将需要的保存起来即可。code:import requestsfrom selenium import webdriver from bs4 import BeautifulSoupimport osimport time class Spide_douban(): def __init__(self): self

2021-10-30 20:23:39 361

原创 爬虫基础(案例:站长之家图片)

爬取思路:1、首先找到图片分类信息,然后获取每个分类的url2、请求每个分类的url可以得到相应页面的HTML源码3、得到源码后使用BS4对信息所在的标签进行定位。4、得到图片URL后保存一下就可以了code:import requestsfrom bs4 import BeautifulSoupimport jsonclass zhanzhang(): def __init__(self): self.url = "https://sc.chinaz.com/t

2021-10-30 18:04:40 368

原创 爬虫基础(案例:京东商品爬取,附selenium使用)

selenium(WEB自动化工具)需要下载chromedriver,版本与chrom版本要对应。from selenium import webdriverimport timedriver = webdriver.Chrome(executable_path = path)# 防止快速关闭浏览器time.sleep(2)url = "www.baidu.com"driver.get(url)#可直接访问url#浏览器定位,chrom调试 定位到目标内容,copy selector然后

2021-10-30 17:41:38 652

原创 爬虫基础(案例:爬取链家网,附:BeautifulSoup中常用的一些操作)

soup.find("ul")返回首个标签为ul的标签内容。类型为soup,仍然可以使用soup类函数对返回内容进行处理。soup.find("ul",attrs = {"class":"ul2"}) 返回标签为ul,且属性class = ul2的标签内容。即添加attrs进行过滤,返回满足要求的首个标签。print(soup.findAll("ul",attrs = {"class":"content"}))soup.findAll 默认返回所有内容,类型是list,list中的每个元素都是

2021-10-30 17:16:10 556

原创 爬虫基础(案例:北京新发地信息爬取)

爬取思路:1、找到蔬菜信息页面,然后进行翻页,发现页面的url没有发生改变,所有蔬菜信息是通过接口数据动态获取的,是动态数据。2、进行chrom调试抓包,找到每个页面信息所在的url3、 发现每个信息的url都相同,post请求,form data不同。4、通过修改提交的data来获取不同页面的蔬菜信息。import requestsimport jsonimport csvfile = open("C://Users//孤桥//Desktop//项目//PekingXFD//vegeta

2021-10-30 16:54:43 2020 1

原创 爬虫基础(案例:爬取英雄联盟全皮肤)

爬取思路:1、首先分析是静态数据还是动态数据,HTML源码中找不到英雄页面的信息,所以是静态数据。2、chrom调试抓包,找到皮肤信息所在的URL ,这里第一个英雄皮肤所在的URL为https://game.gtimg.cn/images/lol/act/img/js/hero/1.js3、直接通过get请求来获取包含目的信息的json数据4、从json数据中提取各个皮肤的url以及名称并保存下来。5、到此为止,单个英雄的皮肤爬取成功。6、分析发现不同英雄页面的url之间只是最后的编号不同,再次

2021-10-30 16:44:39 1263 1

原创 爬虫基础(案例:爬取17K小说个人书架信息)

爬取思路:1、进入17K官网,(先不要登录),然后点击书架,这时会弹出登录页面。2、进行抓包,然后输入登录的账号密码(请勿使用第三方登录)3、登录成功后,找到名称为login的包,这样就得到了登录的URL,Form data为请求时需要提交的信息。4、使用post请求该URL,提交的信息data为Form data中的信息。5、登录成功后,可以获得该URL的cookie信息,找到其中的accessToken6、找到书架书籍所在的链接,使用get请求,请求头中要带有刚刚获取的accessToken

2021-10-30 16:32:43 1340 8

原创 爬虫基础(基础知识)

1、爬虫介绍爬虫是一种按照一定规则,自动地抓取万维网信息的程序或者脚本。通用网络爬虫又称为全网网络爬虫,爬取对象是从一些种子URL扩展到整个WEB,各种搜索引擎是一个典型的例子。聚焦(主题)网络爬虫指有目的性的进行爬虫,根据需求按需采集。深度网络爬虫:有些信息需要提交参数才可以获取隐藏数据。增量式网络爬虫:对曾经爬取过的网站但是又更新的网站进行爬取,可以在一定程度上保证爬取的页面是尽可能新的页面爬取得到的数据的分类有:用户产生的数据:如WeChat、QQ等;政府的数据:中国政府数据网;数据公司管

2021-10-30 16:10:02 604

原创 Python基础知识(实训周)

1、字符串操作str1 = "asdasdasdasdasdasdasd"print(str1[::]) 与str1[:]等价# str1[开始下标:结束下标(不包含)],开始下标默认为0,结束下标默认为最后个位置+1print(str1[::3]) #3是步长print(str1[::-1])#逆序输出print(x)多维数组的切片操作p是一个多维度数组,p.shape = (3,4,5,6)p[a0:b0:c0,a1:b1:c1,a2:b2:c2,a3:b3:c3]a0:b0:c0表

2021-10-30 12:26:39 322

原创 OpenCV常用函数

1、imread用于读入图像x = cv2.imread(path,flag)path:图像路径flag: cv2.IMREAD_COLOR:读入彩色图像(可以直接写1) cv2.IMREAD_GRAYSCALE:读入灰度图像(可以直接写0) cv2.IMREAD_COLOR:和alpha通道有关...(可以直接写-1)读入的图像格式:(height,weight,channel)2、resize更改图像的shapeout = cv2.resize(InputArray src[, O

2021-10-12 16:42:36 1091

原创 给图像添加噪声(椒盐噪声,高斯噪声)

1、椒盐噪声是比较常见的噪声(salt and pepper noise),为什么叫椒盐噪声?因为图像的像素点由于噪声影响随机变成了黑点(dark spot)或白点(white spot)。这里的“椒”不是我们常见的红辣椒或青辣椒,而是外国的“胡椒”(香料的一种)。我们知道,胡椒是黑色的,盐是白色的,所以才取了这么个形象的名字。接下来我们来实现一下椒盐噪声首先看一下原始图片椒盐噪声有两种(slat or pepper)也就是黑点和白点,实现起来是类似的,这里值对slat进行说明import cv2

2021-10-12 16:42:17 9801

原创 Pytorch构造神经网络的几种等价方式

几种构造方式比较常用的两种方式1、通过集成nn.Module()来定义一个神经网络以LeNet为例# LeNet:卷积+池化+卷积+池化+全连接+全连接+全连接(两层卷积+三层全连接,一共5层)class Net(nn.Module): def __init__(self): super().__init__() self.Cv = nn.Sequential( nn.Conv2d(1,6,kernel_size= 5),

2021-10-10 19:26:04 154

原创 批量归一化(BN)

1、为什么需要批量归一化?在训练过程中,每层输入的分布不断的变化,这使得下一层需要不断的去适应新的数据分布,在深度神经网络中,这让训练变得非常复杂而且缓慢。对于这样,往往需要设置更小的学习率、更严格的参数初始化。通过使用批量归一化(Batch Normalization, BN),在模型的训练过程中利用小批量的均值和方差调整神经网络中间的输出,从而使得各层之间的输出都符合均值、方差相同高斯分布,这样的话会使得数据更加稳定,无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的

2021-10-08 20:10:04 301

原创 Python enumerate,iter的用法

1、enumerate将一个可遍历的对象增加下标,组合成一个新的序列enumerate(sequence , [start = 0])例如:seasons = ['Spring', 'Summer', 'Fall', 'Winter']for i,j in enumerate(seasons,start = 1): print(i,j)输出:1 Spring2 Summer3 Fall4 Winter就是给一个可遍历的序列的每一项增加一个下标,然后构成一个元组,再组成一个新序列

2021-10-06 20:57:37 812

原创 Pytorch实现线性回归

从0开始1、导入需要的函数库import torchimport numpy as npimport randomfrom matplotlib import pyplot as pltimport osos.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"#解决jupyter运行时挂掉的问题。2、生成数据#生成数据 y = w*x+b+c 其中 b是偏置值,c是噪声。 num_input = 2num_example = 1000w = np.arr

2021-10-04 09:36:50 93

原创 Pytroch中常用函数

1、torch.empty()torch.empty(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor返回一个size大小的tensor,里面的数值是随机的,主要用到size,其它都是可选内容。szie可以是列表,元组等。2、torch.rand()torch.rand(*size,out=None)返回一个大小为size

2021-10-02 21:00:33 1436

原创 顺序表--动态内存分配

1、空指针(NULL)。不给指针分配物理内存空间。2、野指针:区别于空指针,只是简单的定义的指针的类型,并没有给指针分配属于他自己的内存空间,此时的指针随机指向内存中的一段空间。3、当我们给野指针分配内存后,或者让他指向某一段静态的内存,这时的指针有了自己的内存,不在是野指针。动态分配内存在C语言中,我们常常通过malloc函数为一个野指针分配内存。 int *p;//没有为指针分配内存,此时的指针我们称之为野指针。 p = (int *)malloc(sizeof(int )*Max_siz

2021-05-28 23:32:29 839

原创 归并排序,基数排序

归并排序基本思想:按照二叉树的形式切割数组,直到每个数组中只有单个元素,这样数组就有序了,然后将切割的两个有序的左右数组合并为一个有序的大数组,两两归并,分治法的典型应用。code:void merge(int left,int right,int mid){ for(int i=left;i<=right;i++) tmp[i] = arr[i]; int l = left; int r = mid+1; for(int i = left;i<=right;i++){ if(

2021-05-20 20:13:46 47

原创 选择排序(简单选择排序,堆排序)

简单选择排序基本思想:每一趟(第i趟)都选择数组后(n-i+1)个待排元素中最小的那个,放到位置i上。一共执行n-1趟。code:void s_sort(int q[]){ int minn; for(int i=1;i<=n;i++){ minn = i; for(int j=i+1;j<=n;j++){ if(q[minn]>q[j]) minn = j; } if(minn != i) swap(q[minn],q[i]); }}算法分析:

2021-05-19 21:32:02 46

原创 交换排序(冒泡,快排)

冒泡排序 基本思想:每趟排序考虑相邻的两个数,如果顺序则考虑下两个数,如果逆序就swap一下,这样每一趟排序都可以让最“重”的数下降到边缘,n个数需要进行n-1次排序。(写法有好多种)void bubble_sort(int n){ for(int i=1;i<=n-1;i++){ bool flag = 0; for(int j=1;j<=n-i;j++){ if(arr[j]>arr[j+1]){ flag = 1; swap(arr[j],

2021-05-19 19:39:16 54

原创 插入排序(直接插入,折半插入,希尔)

直接插入排序 基本思想:假设有n个元素,当前考虑到第i个元素,前i-1个元素已经排好顺序,将第i个元素插入到前i-1个合适的位置。 步骤:1、设置一个“哨兵”把第i个元素放到"哨兵"上,比较的时候直接拿"哨兵"比较即可。2、从i-1往前查找合适的位置,并把比当前大的元素往后挪。void insert_sort(int n){ int j; for(int i=2;i<=n;i++){ if(arr[i]<arr[i-1]){//如果arr[i]>=arr[i-1]的话

2021-05-15 21:34:28 128

原创 深度学习---关于OpenCv的部分函数操作

1、读入img = cv2.imread(‘a.jpg’)以BGR的格式读入图像,matoplib是以RGB的方式读入的2、图像的显示#设置可以更改窗口的大小cv2.namedWindow(‘present img’,cv2.WINDOW_NORMAL)#以BGR的方式显示图像cv2.imshow(‘present img’,img)#让图像窗口停留cv2.waitKey()#清理掉内存中无用的缓存的图片cv2.destroyAllWindows()3、图像灰度化处理g

2021-04-08 15:03:25 155

原创 基于卷积神经网络的手写数字识别

import torchfrom torchvision import transformsfrom torchvision.datasets import mnistfrom torch.utils.data import DataLoaderimport torch.nn as nnimport torch.optim as optimepoch_num = 10lr = 0.1momentum = 0.5transform = transforms.Compose([transfor

2021-03-31 22:40:09 127

原创 实验一 :利用卷积神经网络识别CIFAR10图片

import torchimport torchvision# 预处理和加载数据集from torchvision import datasets,transforms# 分批加载打包数据from torch.utils.data import DataLoader# 神经网络模型import torch.nn as nn# 激活函数import torch.nn.functional as F# 加载优化器import torch.optim as optim# 可视化impor

2021-03-29 16:07:58 784

原创 深度学习-----手写数字图片的识别训练

上课讲过的代码,记录一下~~#1导入需要的各类包import numpy as npimport torch# 导入 pytorch 内置的 mnist 数据from torchvision.datasets import mnist #导入预处理模块import torchvision.transforms as transformsfrom torchvision import transforms,datasetsfrom torch.utils.data import DataLo

2021-03-22 21:44:50 313 2

原创 深度学习中Matplotlib和Pandas常用函数

import matplotlib.pyplot as pltimport pandas as pd 1、 Matplotlib.pyplot1、plt.plot(x,y,lw=a,c=‘r’),其中x是一个列表/数组/元组…,y是x通过某种映射得到的。绘出y关于x的图像,lw指的是线宽,c指的是线的颜色。plt.xlabel(‘x-value’) ,plt.ylabel(‘y-valiue’) 对图像进行行列标注。2、对图像添加标签:plt.plot(x,y,label=‘sin fig’)

2021-03-05 20:48:59 369

原创 Numpy常用函数总结

1、array=np.array(list/tuple) 将列表元组等强制转换为数组array=np.array(list/tuple,dtype=float64/int) 强制转换为数据类型为dtype的数组2、array.shape 返回一个元组,各元素表示array数组的各维度的大小。3、np.linspace(a,b,c) 构造初始值是a,结束值是b,一共有20个元素的数组。4、np.arrange(a,b,c) 构造一个初始值是a,结束值是b,步长是c的数组。5、np.zeros((x,

2021-03-04 16:20:13 420 1

原创 (Leetcode)354. 俄罗斯套娃信封问题(二维LIS)

LIS问题。首先对根据w对二维数组进行排序,然后求h的LIS,在这里排序有值得注意的地方,题目要求w1和h1必须严格大于w0和h0才能将其套住。所以如果说w1<w0,显然物品1在物品0的前边,如果w1=w0,那么我们考虑h,如果h1>h0的话,让h1在前边。举个例子:[w0,h0],[w1,h1]。假设W0=W1,如果h0<h1的话,那么LIS=2,这显然是错误的,所以我们让物品1在前边,LIS=1;code:class Solution {public: int d

2021-03-04 16:09:17 126 1

原创 Leetcode(448) 找到所有数组中消失的数字

方法一:用一个数组记录一下每个数字是否出现过。(略)方法二:修改数组,首先看一下数据范围,数组中的数字是介于(1,n)之间的,当某个数字出现时,我们把它看成数组的下标,并对当前位置处的数字+n(n表示的是数组长度)。有一点是值得注意的,就是前边的数字可能会对后边的产生影响。所以取数的时候,对n执行一次取余操作即可。code:class Solution {public: vector<int> findDisappearedNumbers(vector<int>&am

2021-02-13 11:11:15 55

原创 Leetcode 119. 杨辉三角 II

杨辉三角的第k行可以根据组合数进行推到,比如第i行的第j个就是C(i,j)=n!m!(n−m)!\frac{n!}{m!(n-m)!}m!(n−m)!n!​ = C(i,j-1) n−m+1m\frac{n-m+1}{m}mn−m+1​所以可以通过递推公式线性求组合数。code:class Solution {public: vector<int> getRow(int rowIndex) { vector<int> row(rowIndex + 1)

2021-02-12 21:02:08 115

原创 Leetcode 992. K 个不同整数的子数组

可以将问题简化为求一次不同元素个数小于等于k和求一次不同元素个数小于等于k-1的子数组的个数,然后再做差。求不同元素个数小于等于k的子数组的个数可以用滑动窗口来实现。右端窗口每移动一次对答案的贡献为right-left(当前区间大小)class Solution {public: map<int ,int >mp; int f(vector<int >&arr,int k){ mp.clear(); int n=arr.

2021-02-09 21:42:42 73 1

原创 最长湍流子数组(Leetcode 978)

两种方法:1、滑动窗口维护一个左端为left,右端为right的滑动窗口,滑动窗口内部维护的是[湍流子数组],如果说arr[right-1]>arr[right]<arr[right+1]或者说arr[right-1]>arr[right]<arr[right+1],移动right,否则的话,窗口清0,即left = rightclass Solution {public: int maxTurbulenceSize(vector<int>& ar

2021-02-08 20:39:08 72

空空如也

空空如也

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

TA关注的人

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