- 博客(76)
- 资源 (4)
- 收藏
- 关注
原创 python——计算文件的md5值
def get_md5_of_file(file_path): """ 计算文件的md5 """ md5 = None if os.path.isfile(file_path): f = open(file_path, 'rb') md5_obj = hashlib.md5() md5_obj.update(f.read()) hash_code = md5_obj.hexdigest()
2021-08-31 11:13:29
569
原创 python——读写json文件
def load_json_items(json_path): ''' 载入json文件 ''' with open(json_path, "r") as f: json_items = [json.loads(s) for s in f.readlines()] return json_itemsdef save_json_items(json_path, json_items): ''' 保存json文件 '''
2021-08-31 11:09:40
364
原创 python——读取某一目录及其子目录下所有的同类型文件
import osdef gather_files(root_dir, keep_suffixs=['jpg', 'png']): """ 根据文件后缀递归获取root_dir下所有的该类型文件 输出:数组,每个元素是一个文件路径 """ file_counts = {} for suffix in keep_suffixs: file_counts[suffix] = 0 n_files = 0 all_files = [
2021-08-31 10:57:14
824
原创 python中cv2的基本操作——视频、图片的读写
'''总结cv2相关内容'''import cv2import numpy as np'''读图片'''image_path = '/data/weichai/0817_choice_frame/8.4_sortheast/1.jpg'image = cv2.imread(image_path) # image是一个矩阵。shape: (hight, weight, channel)'''保存图片'''output_path = '/home/liulihao/test/
2021-08-31 10:49:11
1492
原创 pytorch——实现自编码器和变分自编码器
文章目录数据降维主成分分析(PCA)自编码器(AE)变分自编码器(VAE)pytorch实现AE实现自编码器网络结构实现AE对MNIST数据集的处理VAE实现变分自编码器网络结构实现VAE对MNIST数据集的处理本文只设计简单的介绍和pytorch实现,数学原理部分请移步知乎“不刷知乎”大佬的文章:半小时理解变分自编码器本文部分观点引自上述知乎文章。数据降维降维是减少描述数据的特征数量的过程。可以通过选择(仅保留一些现有特征)或通过提取(基于旧特征组合来生成数量更少的新特征)来进行降维。降维在许多需
2021-08-18 23:05:33
4632
1
原创 python——xlrd读xlsx文件
import xlrds = xlrd.open_workbook("碳中和书籍第一周分工.xlsx") # 文件名sheet = s.sheet_by_name("Table 0") # 工作表名print("总行数", sheet.nrows)print("总列数", sheet.ncols)def red_row_text(work_sheet, row_index, start_col, end_col): ''' 读取某一行的指定内容 索引都从0开始
2021-08-15 21:36:23
1365
原创 python创建文件夹
文章目录方法介绍方法实现本方法转载自博客园原地址:https://www.cnblogs.com/monsteryang/p/6574550.html方法介绍建立实参path指定的文件夹首先去掉path字符串前面的空格和尾部的“\”查看文件夹是否存在如果不存在就新建文件夹,返回True如果存在提示“目录已存在”,返回False方法实现def mkdir(path): ''' 创建指定的文件夹 :param path: 文件夹路径,字符串格式 :retu
2021-08-15 21:13:14
19828
原创 pytorch——迁移学习实战宝可梦精灵分类
文章目录数据集数据集处理迁移学习网络原理代码实现数据集使用宝可梦精灵的图片数据集。数据集地址:链接:https://pan.baidu.com/s/1zDERMsV1AvwfZudhuae6Ew提取码:rs4h数据集中的每一类别的图片放在一个文件夹中数据集共包含5个类别的图片,我们取每个文件夹(类别):前60%做训练集60%~80%做验证集80%~100%做测试集数据集处理'''load图片数据集'''import torchimport os, globimpo
2021-08-11 21:51:42
1277
2
原创 Colab白嫖指南——以训练YOLO-v5为例
文章目录前言前期准备上传数据集到google-drive创建google colaboratoryColab实现模型训练开启GPU加速Colab连接google-drivegit clone yolo5代码,并适配我们的任务运行训练文件前言本文是在看了《学生党 白嫖之GPU Google colab 训练深度学习模型》 一文之后,按照作者所述内容复现的Colab训练YOLO-v5的模型实验。本文将《学生党 白嫖之GPU Google colab 训练深度学习模型》一文中的所有命令由图片转为了文本,以方便
2021-08-08 22:58:00
3101
7
原创 pytorch——LSTM实现情感分类问题
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/8/1 0:23# @Author : Liu Lihao# @File : LSTM.py# -*- coding: utf-8 -*-import torchfrom torch import nn, optimfrom torchtext.legacy import data, datasetsimport numpy as npprint.
2021-08-08 17:14:23
875
原创 pytorch——LSTM原理与实现
文章目录RNN训练难题梯度爆炸梯度弥散LSTM遗忘门RNN训练难题RNN的梯度推导公式:累乘会导致的梯度爆炸或梯度弥散。梯度爆炸现象:比如loss从0.25、0.24突然变的很大,比如1.7、2.3。解决方案:对梯度做clipping(保持梯度的方向,将梯度的模变小)。将gradient的模clipping到0-10的范围内,之后再做optimizer.step()效果就会好很多。梯度弥散反向传播时越靠前的神经层更新越小,前面的神经层的梯度会接近于0,得到的更新会非常小。解决梯度
2021-08-08 15:36:16
4412
原创 Pytorch——循环神经网络预测正弦函数
文章目录循环神经网络Pytorch实现RNN单元的两种方式nn.RNN()循环神经网络RNN单元会自我更新之后再输出,其前向传播函数如下:Pytorch实现RNN单元的两种方式nn.RNN()初始化:使用:x给的是x不是x(t),就是把x一次全部喂进去X.shape:[seq_len, batch_size, input_size]input_size就是word_vech0可以给也可以不给,不给的话就默认给0ht:最后一个时刻的所有层cnn的状态h.shape:[mun
2021-08-07 22:42:02
1146
原创 pytorch实现ResNet-18
文章目录ResNet-18残差学习单元ResNet-18 结构Pytorch构建ResNet-18使用CIFAR10数据集测试ResNet-18CIFAR10数据集介绍使用CIFAR10数据集测试ResNet-18ResNet-18残差学习单元网络层数越多,并不意味着效果越好。当网络深度更深的时候,每一层的误差积累,最终会导致梯度弥散。最后几层能很好的更新,但是前面几层会一直得不到更新。ResNet设置一个机制,增加短路连接。使30层的网络最差最差也可以退换成22层。短路连接:如果ch_in和c
2021-07-31 18:20:49
3349
原创 pytorch实现Lenet5
文章目录Lenet5结构实现Lenet结构使用CIFAR10数据集测试Lenet5CIFAR10数据集介绍实现Lenet对CIFAR10数据集的分类Lenet5结构Lenet5是最简单版本的卷积神经网络。卷积层Pooling卷积层Pooling全连接层实现Lenet结构'''最简单版本的卷积神经网络'''import torchfrom torch import nn, optimfrom torch.nn import functional as Fclass Len
2021-07-31 15:43:50
598
原创 python:一个超简单的DQN模型
文章目录模型描述模型代码模型描述MDP模型:只考虑状态、动作、回报不考虑转移函数和衰减因子模型代码#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/5/17 14:56# @Author : Liu Lihao# @File : DQN.pyimport torchimport torch.nn as nnimport torch.nn.functional as Fimport random
2021-07-13 21:22:53
1766
1
原创 Python实现Dijkstra最短路径算法
'''Author:Lihao Liu功能:实现最短路径算法参数: sNode:源节点 dNode:目标节点 adjacencyMatrix:网络的邻接矩阵(不连接的地方标0)'''def DijkstraRoad(sNode, dNode, adjacencyMatrix): path = [] # s-d的最短路径 n = len(adjacencyMatrix) # 邻接矩阵维度,即节点个数 fmax = 999 w = [[0 f
2021-06-23 21:54:14
1466
原创 pytorch——通用的低耦合度的DQN模型
文章目录使用须知模型代码使用须知使用时需要:向模型提供运行环境(env),env需要包括以下方法:reset() 重置环境step() 根据动作更新环境得到反馈render() 展示环境,可以为空方法传参:state_dim 表示状态的维度action_num 表示动作空间中包含动作的数量调参模型代码测试部分我们使用的是gym中平衡车环境:#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/5/17
2021-06-10 22:36:30
356
1
原创 Python实现冒泡排序、选择排序和插入排序
文章目录冒泡排序选择排序插入排序冒泡排序def bubSort(arr): length = len(arr) for i in range(length): for j in range(length-1-i): if arr[j] > arr[j+1]: temp = arr[j] arr[j] = arr[j+1] arr[j+1] = te
2021-06-10 20:06:07
304
2
原创 pytorch——两个全连接神经网络的通用模型
文章目录用于分类的全连接神经网络用于拟合的全连接神经网络代码中都加了详细的注释,因此文章中不再赘述。用于分类的全连接神经网络loss函数采用Cross Entropy Loss优化器采用随机梯度下降优化器(SGD)激活函数:ReLU# -*- coding: utf-8 -*- # @Time : 2021/5/11 20:04 # @Author : Liu Lihao# @File : ClassificationANN.pyimport torchimport torch
2021-06-09 15:30:02
1666
原创 pytorch中的梯度、激活函数和loss
文章目录梯度激活函数torch.sigmoid()torch.tanh()torch.relu()nn.LeakyReLU()softmaxloss函数均方差 (Mean Squared Error)梯度梯度包括大小和方向,是一个向量。寻找最小值:learning rate设置为0.001激活函数torch.sigmoid()torch.tanh()torch.relu()nn.LeakyReLU()ReLU在小于零的情况下,也有可能出现梯度弥散,这时候使用Leaky ReL
2021-06-08 22:39:34
590
原创 Pytorch创建Tenser
文章目录从numpy导入从list导入生成未初始化的数据默认Tesner类型生成一定规则的tensor随机初始化正态分布full递增或者递减形成数列等分ones/zeros/eye乱序从numpy导入torch.from_numpy()a = np.array([1,3.3])print(torch.from_numpy(a))'''tensor([1.0000, 3.3000], dtype=torch.float64)'''b=np.ones([2,3])print(torch.fro
2021-06-03 20:24:23
460
原创 Python爬虫——Requests库的基本方法
文章目录Requests库安装Requests库的基本方法get方法post方法requests方法Requests库安装Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。简单的爬虫一般使用Requests库编写。使用pip安装Requests:pip install requestsRequests库的基本方法方法说明requests.request()构造一个请求,支撑以下各方法的基础方法
2021-03-18 10:58:32
249
原创 Maven入门笔记
文章目录Maven简介下载和安装下载安装配置Maven目录结构Maven项目目录结构手动创建Maven项目开发工具IDEA创建Maven项目Maven配置文件之settings.xml文件mirrorslocalRepository暂时不需要掌握的标签Maven仓库Maven项目的pom.xml文件Maven项目依赖Maven插件Maven之archetypeMaven聚合项目Maven插件之tomcat使用使用本地安装的tomcatmaven插件形式的tomcatMaven简介Maven官网:http
2021-03-10 23:23:25
559
5
原创 Python爬虫——HTTP协议详解
文章目录url:定义网络资源的标识http协议请求类型http请求头结构响应头的字段内容http相应状态码url:定义网络资源的标识URL格式 http:// [host] [:port] [path]host:合法的Internet主机域名或IP地址port:端口号,缺省端口(默认端口)为80path:请求资源的路径结构:协议://域名/路径1/路径2/路径3/…/路径n/?参数名1=参数值1&参数名2=参数值2…协议:http或https域名:www.spbeen.com
2021-03-07 12:30:37
625
原创 Java数据结构与算法笔记——带权图最短路径(Dijkstra算法)
文章目录算法思路算法实现算法思路指定一个节点,比如我们要计算A到其他节点的最短路径。引入两个集合(S、U),S集合包含已求出的最短路径的点(以及相应的最短长度),U集合包含未求出最短路径的点(以及A到该点的路径,如果没有直接相连,初始为∞)初始化两个集合,S初始化时只有A→A = 0,U集合初始化时为A→B = 50,A→C = ∞,A→D = 80,A→E = ∞。接下来要进行核心两个步骤了。从U集合中找出路径最短的点,加入到S集合,例如A→B = 50。更新U集合路径,
2021-02-28 22:26:20
991
原创 Java数据结构与算法笔记——带权图最小生成树
文章目录问题描述prin算法实现思路Java实现封装顶点的类封装边的类盛放边集合的优先级队列实现带权图最小生成树的类测试带权图最小生成树的类问题描述假设要在六个城市之间架设电视网线,5条边可以连接6个点,在这里我们应该选择哪5条边呢?不同的城市之间搭建线路的造价是有差异的。 所以,我们应该选择总造价成本最低的5条线路,符合这个要求的线路选择就是带权最小生成树。prin算法实现思路先随意选择一个顶点作为起始点,一般选择A作为起始点,现在我们设U集合为当前所找到最小生成树里面的顶点,TE集合为所找到
2021-02-28 17:42:43
674
原创 Java数据结构与算法笔记——有向图拓扑排序
文章目录有向图拓扑排序实现思路有向图有向图在计算机中有广泛的应用。有向图的顶点之间的联系是描述现实世界的有利工具,如 计算机的任务调度系统,根据多任务之间的先后关联需要给出任务的执行顺序,拓扑排序就是可以得到这一顺序的算法。拓扑排序给定一幅有向图,将所有的顶点排序,使得所有的有向边均从排在前面的元素指向排在后面的元素(或者说明无法做到这一点)。注意项:还是以任务调度系统为例,假设一个任务x必须在任务y之前完成,任务y必须在任务z之前完成,任务z又必须在任务x之前完成,这样的问题肯定是无解的。也就
2021-02-27 23:44:27
353
原创 Java数据结构与算法笔记——图搜素和图的最小生成树
文章目录图的定义图的分类程序中表示图邻接矩阵邻接表图搜素深度优先搜索(DFS)广度优先搜索(BFS)Java实现图封装顶点的类实现深度搜索的栈实现广度搜索的队列封装图的类测试图的类图的定义在计算机程序设计中,图是最常用的结构之一。一般来说,数据存储是用不到图的。图一般用来辅助解决某些具体的问题用的。图没有固定的结构,但是图有固定的形状,这个形状是由物理或抽象的问题所决定的。比如下面的图,并不是要反映城市在地图上的地理位置,它重点放在图中的节点和边之间的关系,描述哪些节点连着哪些边,这些边又连着另外的哪
2021-02-23 10:43:18
717
原创 Java数据结构与算法笔记——堆排序
文章目录堆排序原理Java实现堆排序堆排序原理堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的平均时间复杂度均为O(nlogn)。堆排序的基本思路是:将待排序的序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将根节点与末尾元素进行交换,此时末尾就为最大值。然后将剩余N-1个元素重新构成一个堆,这样根节点就是这n个元素的次大值。将根节点与倒数第二个元素交换。如此反复执行,最后得到一个从小到大的序列。简化的思路:将无序数组构建成一个堆,根据升序
2021-02-22 22:52:46
185
原创 Java数据结构与算法笔记——堆(Heap)
文章目录堆结构堆中元素的关键字大小关系堆中的操作遍历和查找移除插入Java实现堆堆结构**堆是一种完全的二叉树:除了树的最后一层节点不需要是满的,其它的每一层从左到右都是 满的。**注意下面两种情况,第二种最后一层从左到右中间有断隔,那么也是不完全二叉树。堆通常用数组来实现:这种用数组实现的二叉树,假设节点的索引值为index,那么:节点的左子节点是 2*index+1;节点的右子节点是 2*index+2;节点的父节点是(index-1)/2。(整除)堆中元素的关键字大小关系堆中
2021-02-22 22:30:32
526
原创 Java数据结构与算法笔记——哈希表
文章目录哈希表简介冲突装填因子开放地址法线性探测二次探测再哈希法链地址法Java实现哈希表线性探测再哈希法链地址法哈希表简介哈希表通过把保存的数据项本身映射到数组的某个下标来加快查找速度。数组、链表等数据结构查找某个数据项,通常要遍历整个数据结构,也就是O(N)的时间级。但是对于哈希表来说,查找只是O(1)的时间级。我们使用哈希函数来实现数据项到数组下标的映射:arrayIndex = largeNumber % smallRange哈希函数可以把一个大范围的数字压缩成一个小范围的数字(hash化
2021-02-22 18:23:39
382
原创 Java数据结构与算法笔记——234树详解
文章目录2-3-4树简介2-3-4树的结构2-3-4树数据项之间的大小关系2-3-4树的操作搜索2-3-4树插入节点分裂根的分裂Java实现2-3-4树封装数据项的类封装节点的类封装2-3-4树的类测试2-3-4树的类2-3-4树简介2-3-4树的结构2-3-4树是一种多叉树,它的每个节点最多有三个数据项和四个子节点。非叶节点数据项和其子节点数量的关系:有一个数据项的节点总是有两个子节点有两个数据项的节点总是有三个子节点有三个数据项的节点总是有四个子节点简而言之,非叶节点的子节点数总是比
2021-02-21 11:15:52
991
原创 Java数据结构与算法笔记——红黑树详解
文章目录二叉搜索树缺点红黑树红黑树简介红黑树规则插入节点红黑树自我修正改变节点颜色右旋左旋红黑树纠正算法对于情况1对于情况2对于情况3红黑树性能分析二叉搜索树缺点二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的二叉搜索树上体现的,也就是如果插入的数据是随机的,则效率很高,但是如果插入的数据是有序的,比如从小到大的顺序
2021-02-20 22:52:49
464
原创 Java数据结构与算法笔记——树的基本概念和二叉树
文章目录树的基本概念树的组成树的常用术语二叉树和二叉搜索树二叉树二叉搜索树二叉搜索树的操作二叉搜索树代码实现二叉搜索树的效率树的基本概念树的组成树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合。节点:上图的圆圈,都是表示节点。节点一般代表一些实体,在java面向对象编程中,节点一般代表对象。边:连接节点的线称为边,边表示节点的关联关系。一般从一个节点到另一个节点的唯一方法就是沿着一条顺着
2021-02-19 14:07:53
298
原创 Java数据结构与算法笔记——快速排序
文章目录算法原理实现分割数组的思路Java代码实现快速排序算法提升提升效率后的算法实现处理小划分算法原理先通过第一趟排序,将数组原地划分为两部分,其中一部分的所有数据都小于另一部分的所有数据。原数组被划分为2份。通过递归的处理,再对原数组分割的两部分分别划分为两部分,同样是使得其中一部分的所有数据都小于另一部分的所有数据。这个时候原数组被划分为了4份。步骤1,2被划分后的最小单元子数组来看,它们仍然是无序的,但是,它们所组成的原数组却逐渐向有序的方向前进。这样不断划分到最后,数组被划分为多个由一
2021-02-19 10:28:29
445
4
原创 Java数据结构与算法笔记——希尔排序
文章目录不同排序方式的优缺点希尔排序算法原理排序间隔选取希尔排序图解代码实现不同排序方式的优缺点三种简单的排序算法冒泡、选择、插入排序算法,它们的时间复杂度大,都是O(N^2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间有可能会是是我们所不能接受的。在学习解递归的时候,介绍了归并排序,归并排序需要O(NlogN),这比简单排序要快了很多,但是归并排序有个缺点,它需要的空间是原始数组空间的两倍,当我们需要排序的数据占据了整个内存的一半以上的空间,那么是不能使用归并排序的。
2021-02-18 22:44:24
268
原创 Java数据结构与算法笔记——递归解决背包问题
背包问题描述背包问题也是计算机中的经典问题。在最简单的形式中,需要将不同重量的数据项放到背包中,以使得背包最后达到指定的总重量。比如:假设想要让背包精确地承重20磅,并且有 5 个可以放入的数据项,它们的重量分别是 11 磅,8 磅,7 磅,6 磅,5 磅。这个问题可能对于人类来说很简单,我们大概就可以计算出 8 磅+ 7 磅 + 5 磅 = 20 磅。但是如果让计算机来解决这个问题,就需要给计算机设定详细的指令了。递归分析1、递归的边界:选择的数据项的总和符合目标重量——匹配试验了所有的组合没
2021-02-18 21:39:58
570
原创 Java数据结构与算法笔记——递归解决数学问题的两个其他案例
文章目录递归求数的乘方递归解决组合问题递归求数的乘方package recursion;public class RecursionTest8 { public static void main(String[] args) { System.out.println(pow(2,5)); } //用递归的算法实现求乘方,y不能是负数 public static int pow(int x, int y){ if(y == 0){//
2021-02-18 21:25:34
173
原创 Java数据结构与算法笔记——利用栈来消除递归
消除递归递归对于分析问题比较有优势,但是基于递归的实现效率就不高了,而且因为函数栈大小的限制,递归的层次也有限制。所以消除递归就显得很重要了,这样我们可以在分析阶段采用递归思想,而实现阶段把递归转变成非递归算法。比如:求1+2+…+n的值://利用递归,求1+2+3+....+n的值 public static int addn(int n){ if(n==1){ return n; }else { return
2021-02-18 20:59:35
809
原创 Java数据结构与算法笔记——递归实现归并排序
文章目录合并两个有序数组实现归并排序合并两个有序数组归并算法的中心是归并两个已经有序的数组。归并两个有序数组A和B,就生成了第三个有序数组C,数组C包含数组A和B的所有数据项。package recursion;import java.lang.reflect.Array;import java.util.Arrays;public class RecursionTest5 { public static void main(String[] args) { in
2021-02-12 17:50:14
166
linux—awvs.zip
2020-07-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人