首页
壁纸
留言板
友链
更多
统计归档
Search
1
TensorBoard:训练日志及网络结构可视化工具
12,602 阅读
2
主板开机跳线接线图【F_PANEL接线图】
7,755 阅读
3
Linux使用V2Ray 原生客户端
6,664 阅读
4
移动光猫获取超级密码&开启公网ipv6
6,036 阅读
5
NVIDIA 显卡限制功率
3,233 阅读
好物分享
实用教程
linux使用
wincmd
学习笔记
mysql
java学习
nginx
综合面试题
大数据
网络知识
linux
放码过来
python
javascript
java
opencv
蓝桥杯
leetcode
深度学习
开源模型
相关知识
数据集和工具
模型轻量化
语音识别
计算机视觉
杂七杂八
硬件科普
主机安全
嵌入式设备
其它
bug处理
登录
/
注册
Search
标签搜索
好物分享
学习笔记
linux
MySQL
nvidia
typero
内网穿透
webdav
vps
java
cudann
gcc
cuda
树莓派
CNN
图像去雾
ssh安全
nps
暗通道先验
阿里云
jupiter
累计撰写
358
篇文章
累计收到
72
条评论
首页
栏目
好物分享
实用教程
linux使用
wincmd
学习笔记
mysql
java学习
nginx
综合面试题
大数据
网络知识
linux
放码过来
python
javascript
java
opencv
蓝桥杯
leetcode
深度学习
开源模型
相关知识
数据集和工具
模型轻量化
语音识别
计算机视觉
杂七杂八
硬件科普
主机安全
嵌入式设备
其它
bug处理
页面
壁纸
留言板
友链
统计归档
搜索到
358
篇与
的结果
2021-01-24
ajax标准请求
ajax标准请求ajax$.ajax({ url:"http://url...", dataType:"json", async:true, data:{"id":"value"}, type:"GET", beforeSend:function(){ }, success:function(data){ }, complete:function(){ }, error:function(){ } });GET$.get("/", {"key": "val"}, res=>{ alert(res); });POST$.post("/", {"key": "val"}, res=>{ alert(res); }, "json");
2021年01月24日
622 阅读
0 评论
0 点赞
2021-01-24
机器学习——几种距离度量方法
机器学习——几种距离度量方法1. 欧氏距离(Euclidean Distance)欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离:三维空间点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量):2. 曼哈顿距离(Manhattan Distance)顾名思义,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离:n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的曼哈顿距离:3. 切比雪夫距离 (Chebyshev Distance)国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?这个距离就叫切比雪夫距离。二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离:n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的切比雪夫距离:4.标准化欧氏距离 (Standardized Euclidean Distance)定义: 标准化欧氏距离是针对欧氏距离的缺点而作的一种改进。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。假设样本集X的均值(mean)为m,标准差(standard deviation)为s,X的“标准化变量”表示为:标准化欧氏距离公式:如果将方差的倒数看成一个权重,也可称之为加权欧氏距离(Weighted Euclidean distance)。5 余弦距离(Cosine Distance)几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:即:夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。参考资料机器学习——几种距离度量方法比较:https://my.oschina.net/hunglish/blog/787596
2021年01月24日
607 阅读
0 评论
0 点赞
2021-01-24
Kmeans算法简介
Kmeans算法简介算法介绍人的“物以类聚”新生入学后根据各自的喜好加入对应的社团。数据的“物以类聚”如果把人类比机器学习中的数据,那么聚类就很好理解了每当这个类别中有了新的数据加入的时候,我们要做的就是更新这个类别的中心位置,以方便这个新样本去适应这个类别,这便是kmeans算法的主要逻辑了。如何定义相似用两个点的距离:如欧式距离引入cluster的相关概念Kmean聚类实例处理步骤:随机从数据集中选取K个样本当做centroid对于数据集中的每个点,计算它距离每个centroid的距离,并把它归为距离最近的那个cluster更新新的centroid位置重复2.3,直到centroid的位置不再改变KMEANS的优缺点优点非监督类的算法不需要样本的标注信息缺点不能利用到数据的标注信息,意味着模型的性能不如其他监督学习对于K的取值,也就是你认为数据集中的样本应该分为几类,这个参数的设置极为敏感!对于数据集本身样本的分布也很敏感参考资料【五分钟机器学习】物以类聚的Kmeans:https://www.bilibili.com/video/BV1ei4y1V7hX?from=search&seid=12931680004886943436
2021年01月24日
634 阅读
0 评论
0 点赞
2021-01-24
506显卡信息统计
506显卡信息统计型号显存容量显存类型CUDA核心数最大功耗(仅供参考)Quadro NVS3151GBGDDR34819.5WJETSON NANO4GBLPDDR41285WQuadro K6202GBGDDR538441WGeForce GT 7302GBGDDR538450WGeForce GTX 750Ti2GBGDDR564060WQuadro M20004GBGDDR576875WGeForce GTX Titan Black6GBGDDR52880250WTesla V100 16GB16GBGDDR55120250W
2021年01月24日
833 阅读
0 评论
0 点赞
2021-01-24
VOC数据集分为train、val、test、trainval
VOC数据集分为train、val、test、trainval分割示意图代码实现import os import random xml_dir='./labels_voc/' #xml文件路径(Annotations) txt_save_dir = './ImageSets/Main' # txt文件 save path if not os.path.exists(txt_save_path): os.makedirs(txt_save_path) # 设置数据分割比例 trainval_percent = 0.9 train_percent = 0.8 # 获取所有的xml文件名 total_xml = os.listdir(xml_dir) # xml文件计数 num = len(total_xml) # 根据xml文件计数结果生成索引list并根据索引list分割为train、val、test、trainval xml_index_list = range(num) trainval_num = int(num * trainval_percent) train_num = int(trainval_num * train_percent) trainval_index_list = random.sample(xml_index_list, trainval_num) train_index_list = random.sample(trainval_index_list, train_num) # 根据分割完的索引文件将对应的文件名分别写入对应文件 ftrainval = open(txt_save_dir + '/trainval.txt', 'w') ftest = open(txt_save_dir + '/test.txt', 'w') ftrain = open(txt_save_dir + '/train.txt', 'w') fval = open(txt_save_dir + '/val.txt', 'w') for i in xml_index_list: file_name = total_xml[i][:-4] + '\n' if i in trainval_index_list: ftrainval.write(file_name) if i in train_index_list: ftrain.write(file_name) else: fval.write(file_name) else: ftest.write(file_name) ftrainval.close() ftrain.close() fval.close() ftest.close()结果ImageSets/ └── Main ├── test.txt ├── train.txt ├── trainval.txt └── val.txt参考资料制作VOC数据集时生成trainval.txt,train.txt,val.txt代码:https://blog.csdn.net/weixin_41868104/article/details/89886697
2021年01月24日
1,041 阅读
0 评论
0 点赞
2021-01-24
VOC数据集转YOLO数据集
VOC数据集转YOLO数据集VOC数据集样例<annotation> <folder>VOC2007</folder> <filename>009947.jpg</filename> <source> <database>The VOC2007 Database</database> <annotation>PASCAL VOC2007</annotation> <image>flickr</image> <flickrid>317223454</flickrid> </source> <owner> <flickrid>vaio_2002</flickrid> <name>Jonathan</name> </owner> <size> <width>332</width> <height>500</height> <depth>3</depth> </size> <segmented>1</segmented> <object> <name>boat</name> <pose>Left</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>115</xmin> <ymin>92</ymin> <xmax>250</xmax> <ymax>321</ymax> </bndbox> </object> <object> <name>person</name> <pose>Unspecified</pose> <truncated>1</truncated> <difficult>1</difficult> <bndbox> <xmin>165</xmin> <ymin>288</ymin> <xmax>186</xmax> <ymax>312</ymax> </bndbox> </object> </annotation>对应YOLO数据集样例格式说明:每行对应一个box,每个box分别有五个参数label indexcenter_xcenter_ywidthheight10 0.5496987951807228 0.413 0.4066265060240964 0.458 5 0.5286144578313253 0.6 0.06325301204819277 0.048代码实现import xmltodict import os from progressbar import * xml_dir='./labels_voc' #原xml路径 txt_dir='./labels' #转换后txt文件存放路径 # 所有待检测的labels class_names = ['aeroplane', 'cat', 'car', 'dog', 'chair', 'person', 'horse', 'bird', 'tvmonitor', 'bus', 'boat', 'diningtable', 'bicycle', 'bottle', 'sofa', 'pottedplant', 'motorbike', 'cow', 'train', 'sheep'] # 将voc xml中的object转化为对应的一条yolo数据 def get_yolo_data(obj,img_width,img_height): # 获取voc格式的数据信息 name = obj['name'] xmin = float(obj['bndbox']['xmin']) xmax = float(obj['bndbox']['xmax']) ymin = float(obj['bndbox']['ymin']) ymax = float(obj['bndbox']['ymax']) # 计算yolo格式的数据信息 class_idx = class_names.index(name) x_center = (xmin + xmax) / 2 / img_width y_center = (ymin + ymax) / 2 / img_height box_width = (xmax - xmin) / img_width box_height = (ymax - ymin) / img_height yolo_data = "{} {} {} {} {}\n".format(class_idx,x_center,y_center,box_width,box_height) return yolo_data # 逐一处理xml文件,转换为YOLO所需的格式 #进度条支持 count = 0 #计数器 widgets = ['VOC2YOLO: ',Percentage(), ' ', Bar('#'),' ', Timer(),' ', ETA()] pbar = ProgressBar(widgets=widgets, maxval=len(os.listdir(xml_dir))).start() for xml_file in os.listdir(xml_dir): xml_file_path = os.path.join(xml_dir,xml_file) txt_file_path = os.path.join(txt_dir,xml_file[:-4]+".txt") yolo_data = "" with open(xml_file_path) as f: xml_str = f.read() # 转为字典 xml_dic = xmltodict.parse(xml_str) # 获取图片的width、height img_width = float(xml_dic["annotation"]["size"]["width"]) img_height = float(xml_dic["annotation"]["size"]["height"]) # 获取xml文件中的object objects = xml_dic["annotation"]["object"] if isinstance(objects,list): # xml文件中包含多个object for obj in objects: yolo_data += get_yolo_data(obj,img_width,img_height) else: # xml文件中包含1个object obj = objects yolo_data += get_yolo_data(obj,img_width,img_height) with open(txt_file_path,'w') as f: f.write(yolo_data) #更新进度条 count += 1 pbar.update(count) pbar.finish()实现结果原始数据labels_voc ├── 000005.xml ├── 000007.xml ├── 000009.xml ├── 000012.xml ├── 000016.xml ├── 000017.xml ├── 000019.xml ├── 000020.xml ├── 000021.xml生成数据labels ├── 000005.txt ├── 000007.txt ├── 000009.txt ├── 000012.txt ├── 000016.txt ├── 000017.txt ├── 000019.txt ├── 000020.txt ├── 000021.txt参考资料PASCAL VOC 数据集转化为yolo数据集格式:https://blog.csdn.net/guo_python/article/details/107984940
2021年01月24日
730 阅读
0 评论
0 点赞
2021-01-24
VOC数据集类别统计
1.数据统计核心代码import xmltodict import os from tqdm import tqdm xml_dir = input(prompt="请输入xml文件夹地址:") #xml文件路径(Annotations) if not os.path.exists(xml_dir): print("[发生错误]:",xml_dir,"不存在") else: statistical_results = {} #进度条功能 pbar = tqdm(total=len(os.listdir(xml_dir))) pbar.set_description("VOC数据集类别统计:") # 设置前缀 for xml_file in os.listdir(xml_dir): # 拼接xml文件的path xml_file_path = os.path.join(xml_dir,xml_file) # 读取xml文件到字符串 with open(xml_file_path) as f: xml_str = f.read() # xml字符串转为字典 try: xml_dic = xmltodict.parse(xml_str) except Exception as e: print("[发生错误]:",xml_file_path,"解析失败") # 获取xml文件中的所有objects obj_list = xml_dic["annotation"]["object"] if not isinstance(obj_list,list): # xml文件中包含多个object obj_list = [obj_list] # labels分布统计 for obj in obj_list: if not obj['name'] in statistical_results.keys(): statistical_results[obj['name']] = 1 else: statistical_results[obj['name']] += 1 #更新进度条 pbar.update(1) #释放进度条 pbar.close() #输出统计结果 cls_list = list(statistical_results.keys()) print("=================================================") print("[统计报告]:") print("class list:",cls_list) print("类别总数:",len(cls_list)) print("类别分布情况:",statistical_results) print("=================================================")请输入xml文件夹地址:csf [发生错误]: csf 不存在请输入xml文件夹地址:C:\Users\itrb\Desktop\AirportApronDatasetLabel\label-finished\105-normal\Annotations VOC数据集类别统计:: 100%|████████████████████████████████████████████████████████| 1943/1943 [00:01<00:00, 1416.14it/s] ?it/s] ================================================= [统计报告]: class list: ['BridgeVehicle', 'Person', 'FollowMe', 'Plane', 'LuggageTruck', 'RefuelingTruck', 'FoodTruck', 'Tractor'] 类别总数: 8 类别分布情况: {'BridgeVehicle': 1943, 'Person': 2739, 'FollowMe': 4, 'Plane': 1789, 'LuggageTruck': 83, 'RefuelingTruck': 401, 'FoodTruck': 378, 'Tractor': 748} =================================================2.统计结果可视化2.1 根据统计结果绘制条形图# 绘制条形图 import matplotlib.pyplot as plt import numpy as np # 初始化画布 fig = plt.figure(figsize=(13,5),dpi=200) # 添加一个子图 ax = plt.subplot(1,1,1) # 绘制条形图 y_pos = np.arange(len(statistical_results)) ax.barh(y_pos,list(statistical_results.values())) # 设置y轴的ticklabels ax.set_yticks(y_pos) ax.set_yticklabels(list(statistical_results.keys())) # 设置图片的标题 ax.set_title("The total number of objects = {} in {} images".format( np.sum(list(statistical_results.values())),len(os.listdir(xml_dir)) )) plt.show()2.2 根据统计结果绘制折线图# 绘制折线图 import matplotlib.pyplot as plt import numpy as np # 初始化画布 fig = plt.figure(figsize=(13,5),dpi=200) # 添加一个子图x ax = plt.subplot(1,1,1) # 绘制折线图 x_pos = np.arange(len(statistical_results)) ax.plot(x_pos,list(statistical_results.values())) # 设置x轴的ticklabels ax.set_xticks(x_pos) ax.set_xticklabels(list(statistical_results.keys()),rotation = 45) # 设置图片的标题 ax.set_title("The total number of objects = {} in {} images".format( np.sum(list(statistical_results.values())),len(os.listdir(xml_dir)) )) plt.show()
2021年01月24日
900 阅读
0 评论
0 点赞
2021-01-23
显示器常用输出接口介绍
显示器常用输出接口介绍接口性能排序目前市场接口的性能排名是:DP > HDMI > DVI > VGAVGA——最古老的接口VGA 接口,又称 D-Sub 接口,采用的是模拟信号,仅限视频的传输。最早之前使用的 CRT 显示器就是使用的这种接口,因为是模拟信号,所以容易受到干扰,在显示画面之前,要经过多次信号间的转换,信号容易丢失,最后导致画面质量下降。在1080P的分辨率下,用肉眼就能看到画面的损失,所以建议1080P分辨率以下的显示器使用。VGA 缺点:图像质量不高不能传输音频你在一些投影仪和显示器中依然可以看到它的身影,但它已经不是市场的主流,大多数旧款笔记本电脑只有 VGA 接口,但较新的笔记本电脑一般都会有 DisplayPort 或 HDMI 接口。DVI——144hz,1080p为了弥补 VGA 接口的不足,推出了能同时支持模拟信号和数字信号传输的 DVI 接口,它其实是一个过渡产品,它比较明显的缺点是不支持音频信号,局限了它的普及和发展。DVI 接口型号较多,主要分为三种:DVI-A(模拟信号)、DVI-D(数字信号) 和 DVI-I(集成模拟和数字信号),其中 DVI-A 非常罕见。另外, DVI-D 和 DVI-I 又有单通道和双通道之分,区别在于带宽不同。单通道的 DVI-D 或 DVI-I 可以承载 3.96 Gbit / s,最高分辨率为 1920×120。双通道最大带宽为 7.92 Gbit / s,最高分辨率为 2560×1600。数字信号的传输不需要转换,可以直接传送到显示器材,传输速度快,画面质量也更好。但是 DVI 只支持 8bit 的 RGB 信号传输、兼容性考虑,预留了不少引脚以支持模拟设备,造成接口体积较大。目前比较好的DVI接口能够传输 2K 画面,但也基本是极限了。如果你需要一个 1080P 144Hz 的显示器,DVI 还可以胜任,但是如果你需要一个更高的分辨率,你需要使用 HDMI 或 DisplayPort 接口。HDMI——高品质多媒体接口HDMI 是一种数字化的视频和音频接口技术,支持音频的输出,它的出现取代了模拟信号。广泛应用在机顶盒、电视机、显示器、投影仪等设备,由于使用较多,也衍生出三种接口形式:标准 HDMI 接口、Micro HDMI 接口和 Mini HDMI 接口。HDMI 1.4 接口是目前显示器中最常见的,它支持多通道音频传输,能提供逼真的色彩,可以支持 4K 分辨率,但是刷新率最高只有 30Hz。可以提供 75Hz 刷新率 2560×1600 分辨率, 和 144Hz 刷新率 1920×1080 分辨率,非常合适竞技游戏。此外,HDMI 1.4不支持 21:9 视频和 3D 立体格式。HDMI 2.0 进一步扩展了色彩深度,能在 60Hz 刷新率下支持 4K。它还增加了对 21:9 宽高比和 3D 立体格式的支持。此外,HDMI 2.0 允许 144Hz 的 1440p 和 240Hz 的 1080p。1.4 和 2.0 版本都支持自适应同步,即AMD FreeSync技术。HDMI 2.0a 增加了对 HDR(高动态范围)的支持,而HDMI 2.0b 则支持高级 HDR10 格式和HLG标准。HDMI 2.1 增加对动态HDR,4K的4K以及120Hz的8K的支持。DPDP 接口也是一种高清数字显示接口标准,是目前的主流,用于一些高端显示器,可以看做是 HDMI 接口的升级版,但是内部传输方式与 DIV 和 HDMI 完全不同,带宽更高,有更好的性能。如果您在使用 4K 显示器,HDMI 带宽不足,只能传送 30 帧,而 DP 完全可以胜任。DisplayPort 1.2 对于采用 Nvidia G-Sync 的游戏显示器来说是必备接口。在HBR2(高比特率2)模式下,DisplayPort 1.2 的有效带宽达到 17.28 Gbit / s,允许广泛的色域支持和高达 4K 的 75Hz 的高分辨率/刷新率。多个显示器可以通过菊花链(DisplayPort-Out)连接在一起。DisplayPort 1.2 能够支持 3840×2160,4K,刷新率 60Hz 或者 1080p 分辨率,刷新率 144Hz。最新的 DisplayPort 1.4 接口通过使用 3:1 压缩比的 DSC(显示流压缩)编码,增加了对 HDR10 和 Rec2020 色域以及 60Hz 的8K HDR 和 120Hz 的 4K HDR的支持。DP 接口还有一种衍生的形式:Mini DP 接口,尺寸更小,是由苹果公司推出的。【非主流接口】DMS-59一种视频输出接口,可同时输出两路DVI信号。常用在工业领域。接口转换VGA 和 DVI 互转,属于模拟信号和数字信号的转换,视频信号会有损失,造成失真。DVI 和 HDMI 互转,属于数字信号之间的转换,但是从 HDMI 转换 DVI 时会自动舍去音频信号。参考资料显示器常用输出接口介绍:https://www.xianshiqiba.com/knowledge-base/monitor-interfaces/
2021年01月23日
976 阅读
0 评论
0 点赞
2021-01-22
[www.cc148.com]小说爬虫
[www.cc148.com]小说爬虫from bs4 import BeautifulSoup from urllib.request import urlopen from progressbar import * #根据目录页面地址获取目录页面的html、并封装为soup catalogue_url = "https://www.cc148.com/19_19568/" html = urlopen(catalogue_url).read().decode('gbk') soup = BeautifulSoup(html, features='lxml') #根据目录页html获取到小说的titile title = soup.title.text.split("最新章节列表")[0] #根据目录页html获取到小说每一章的地址集合chapter_url_list chapter_url_list = [] for dd in soup.find_all('dd'): chapter_url = catalogue_url + dd.a["href"] chapter_url_list.append(chapter_url) # 加入进度条功能 widgets = ['正在下载--'+title,Percentage(), ' ', Bar('#'),' ', Timer(),' ', ETA()] pbar = ProgressBar(widgets=widgets, maxval=len(chapter_url_list)).start() count = 0 #根据chapter_url_list逐章下载并保存到当前文件夹 txt_file_name = title + ".txt" with open(txt_file_name,'w') as f: for chapter_url in chapter_url_list: chapter_html = urlopen(chapter_url).read().decode('gbk') chapter_soup = BeautifulSoup(chapter_html, features='lxml') chapter_title = chapter_soup.title.text.split('_')[0] chapter_content = chapter_soup.find("div",{"id":"content"}).text chapter_text = chapter_title + "\n" + chapter_content + "\n" f.write(chapter_text) count +=1 pbar.update(count) pbar.finish()
2021年01月22日
684 阅读
0 评论
0 点赞
2021-01-20
统计VOC数据集中的所有标签(class_name_list)
1. PASCAL VOC数据格式<?xml version='1.0' encoding='utf-8'?> <annotation verified="no"> <folder>JPEGImages</folder> <filename>2018_06_05_09_06_55_065</filename> <path>F:\receive\VOC2007\JPEGImages\2018_06_05_09_06_55_065.jpg</path> <source> <database>Unknown</database> </source> <size> <width>2048</width> <height>1536</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>1</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>530</xmin> <ymin>752</ymin> <xmax>1498</xmax> <ymax>1326</ymax> </bndbox> </object> </annotation>2.获取voc数据集标签所有的类别数即下的所有的的import xmltodict import os # VOC xml文件所在文件夹 annotation_dir="./labels_voc/" label_list = list() # 逐一处理xml文件 for file in os.listdir(annotation_dir): annotation_path = os.path.join(annotation_dir,file) # 读取xml文件 with open(annotation_path,'r') as f: xml_str = f.read() #转为字典 xml_dic = xmltodict.parse(xml_str) # 获取label并去重加入到label_list objects = xml_dic["annotation"]["object"] if isinstance(objects,list): # xml文件中包含多个object for obj in objects: label = obj['name'] if label not in label_list: label_list.append(label) else:# xml文件中只包含1个object obj = objects label = object_['name'] if label not in label_list: label_list.append(label) print(label_list)['aeroplane', 'cat', 'car', 'dog', 'chair', 'person', 'horse', 'bird', 'tvmonitor', 'bus', 'boat', 'diningtable', 'bicycle', 'bottle', 'sofa', 'pottedplant', 'motorbike', 'cow', 'train', 'sheep']
2021年01月20日
786 阅读
0 评论
0 点赞
2021-01-17
Python中xml、字典、EasyDict、json格式相互转换(包含json格式化和xml格式化)
Python中xml、字典、EasyDict、json格式相互转换(包含json格式化和xml格式化)依赖包jsonxmltodictxml转字典import xmltodict xmlstr =""" <student> <stid>10213</stid> <info> <name>name</name> <sex>male</sex> </info> <course> <name>math</name> <score>90</score> </course> </student> """ #parse是的xml解析器 dict_ = xmltodict.parse(xmlstr) print(dict_)OrderedDict([('student', OrderedDict([('stid', '10213'), ('info', OrderedDict([('name', 'name'), ('sex', 'male')])), ('course', OrderedDict([('name', 'math'), ('score', '90')]))]))])字典转EasyDictimport xmltodict xmlstr =""" <student> <stid>10213</stid> <info> <name>name</name> <sex>male</sex> </info> <course> <name>math</name> <score>90</score> </course> </student> """ #parse是的xml解析器 dict_ = xmltodict.parse(xmlstr) #转EasyDict from easydict import EasyDict dict_ = EasyDict(dict_) print(dict_){'student': {'stid': '10213', 'info': {'name': 'name', 'sex': 'male'}, 'course': {'name': 'math', 'score': '90'}}}字典转json最简版import json dict_ = { 'name': 'Jack', 'age': 22, 'skills': ['Python', 'Java', 'C++', 'Matlab'], 'major': '计算机技术', 'english': '英语六级', 'school': 'WIT' } #json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。 #dumps()方法的ident=1,格式化json jsonstr = json.dumps(dict_) print(jsonstr){"name": "Jack", "age": 22, "skills": ["Python", "Java", "C++", "Matlab"], "major": "\u8ba1\u7b97\u673a\u6280\u672f", "english": "\u82f1\u8bed\u516d\u7ea7", "school": "WIT"}很明显中文字符被转化了,于是使用:ensure_ascii=Falseimport json dict_ = { 'name': 'Jack', 'age': 22, 'skills': ['Python', 'Java', 'C++', 'Matlab'], 'major': '计算机技术', 'english': '英语六级', 'school': 'WIT' } #json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。 #dumps()方法的ident=1,格式化json jsonstr = json.dumps(dict_,ensure_ascii=False) print(jsonstr){"name": "Jack", "age": 22, "skills": ["Python", "Java", "C++", "Matlab"], "major": "计算机技术", "english": "英语六级", "school": "WIT"}加入行缩进import json dict_ = { 'name': 'Jack', 'age': 22, 'skills': ['Python', 'Java', 'C++', 'Matlab'], 'major': '计算机技术', 'english': '英语六级', 'school': 'WIT' } #json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。 #dumps()方法的ident=1,格式化json jsonstr = json.dumps(dict_,indent=2) #indent=2 表示行缩进=2 print(jsonstr){ "name": "Jack", "age": 22, "skills": [ "Python", "Java", "C++", "Matlab" ], "major": "\u8ba1\u7b97\u673a\u6280\u672f", "english": "\u82f1\u8bed\u516d\u7ea7", "school": "WIT" }很明显中文字符被转化了,于是使用:ensure_ascii=Falseimport json dict_ = { 'name': 'Jack', 'age': 22, 'skills': ['Python', 'Java', 'C++', 'Matlab'], 'major': '计算机技术', 'english': '英语六级', 'school': 'WIT' } #json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。 #dumps()方法的ident=1,格式化json jsonstr = json.dumps(dict_,indent=2,ensure_ascii=False) #indent=2 表示行缩进=2 print(jsonstr){ "name": "Jack", "age": 22, "skills": [ "Python", "Java", "C++", "Matlab" ], "major": "计算机技术", "english": "英语六级", "school": "WIT" }json转字典json.loads(json串),将json字符串转化成字典import json jsonstr = """ { "name": "Jack", "age": 22, "skills": [ "Python", "Java", "C++", "Matlab" ], "major": "计算机技术", "english": "英语六级", "school": "WIT" } """ dict_ = json.loads(jsonstr) print(dict_){'name': 'Jack', 'age': 22, 'skills': ['Python', 'Java', 'C++', 'Matlab'], 'major': '计算机技术', 'english': '英语六级', 'school': 'WIT'}字典转xmlimport xmltodict dict_ = {'student': {'course': {'name': 'math', 'score': '90'}, 'info': {'sex': 'male', 'name': 'name'}, 'stid': '10213'}} xmlstr = xmltodict.unparse(dict_) print(xmlstr)<?xml version="1.0" encoding="utf-8"?> <student><course><name>math</name><score>90</score></course><info><sex>male</sex><name>name</name></info><stid>10213</stid></student>XML格式化(美化)import xmltodict dict_ = {'student': {'course': {'name': 'math', 'score': '90'}, 'info': {'sex': 'male', 'name': 'name'}, 'stid': '10213'}} xmlstr = xmltodict.unparse(dict_) from xml.dom import minidom xml = minidom.parseString(xmlstr) xml_pretty_str = xml.toprettyxml() print(xml_pretty_str)<?xml version="1.0" encoding="utf-8"?> <student> <course> <name>math</name> <score>90</score> </course> <info> <sex>male</sex> <name>name</name> </info> <stid>10213</stid> </student>参考资料Python中xml和json格式相互转换操作示例:https://www.jb51.net/article/152118.htmPython json读写方式和字典相互转化:https://www.jb51.net/article/184983.htmPython如何优雅的格式化XML 【Python XML Format】: https://blog.csdn.net/qq_41958123/article/details/105357692
2021年01月17日
1,121 阅读
0 评论
0 点赞
2021-01-16
Ubuntu上安装tinyproxy搭建HTTP代理服务器
0.什么是TinyProxy它是一个代理服务器,用来实现http或https代理,windows系统一直在用ccproxy, 非windows系统,怎么开放个http代理呢?那就是TinyProxy。1.TinyProxy安装sudo apt-get update apt-get install tinyproxy2.配置参数文件vi /etc/tinyproxy.conf修改下面两个部分:Port 8888 #预设是8888 Port,你可以更改 Allow 127.0.0.1 #将127.0.0.1改成你自己的IP #例如你的IP 是1.2.3.4,你改成Allow 1.2.3.4,那只有你才可以连上这个Proxy #若你想任何IP都可以脸到Proxy在Allow前面打#注释3.TinyProxy打开与关闭service tinyproxy start/restart/stop4.连接测试在另一台客户机上输入curl -x <IP>:<PORT> www.baidu.com其中IP和PORT是代理服务器的IP和代理端口,如果出现百度的源代码,则证明代理配置成功。参考资料Ubuntu上安装tinyproxy搭建HTTP代理服务器:https://blog.csdn.net/weixin_41010318/article/details/85015976腾讯云Ubuntu搭建TinyProxy代理服务器:https://cloud.tencent.com/developer/article/1004731
2021年01月16日
1,385 阅读
0 评论
0 点赞
2021-01-16
CenterOS7防火墙常用命令
查看防火墙是否关闭[root@localhost ~]# firewall-cmd --state not running [root@localhost ~]#开启防火墙[root@localhost ~]# systemctl start firewalld [root@localhost ~]# firewall-cmd --state running关闭防火墙[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# firewall-cmd --state not running禁止firewall开机启动[root@localhost ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. 这样设置的话,下次重启开机的时候就会禁止firewall的启动,即关闭状态。设置firewall开机启动[root@localhost ~]# systemctl enable firewalld Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service. Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.参考资料CENTER OS7关闭防火墙:https://www.cnblogs.com/gucb/p/11156935.html
2021年01月16日
685 阅读
0 评论
0 点赞
2021-01-16
CentOS7设置上网代理
CentOS设置上网代理1、网页上网网页上网设置代理很简单,在firefox浏览器下 Edit-->>Preferences-->>Advanced-->>Network在Connection下点击Settings,里面的manual proxy configuration里设置IP和PORT即可,2、系统环境代理设置设置全局代理修改 /etc/profile 文件,添加下面内容:http_proxy=http://username:password@yourproxy:8080/ https_proxy=https://username:password@yourproxy:8080/ export http_proxy export https_proxy如果没有密码限制,则以上内容可以修改为以下内容:http_proxy=http://yourproxy:8080/ https_proxy=https://yourproxy:8080/ export http_proxy export https_proxy针对某个用户设置代理只修改 ~/.bash_profile 文件,文件内容与上面的 /etc/profile 相同http_proxy=http://username:password@yourproxy:8080/ https_proxy=https://username:password@yourproxy:8080/ export http_proxy export https_proxy如果没有密码限制,则以上内容可以修改为以下内容:http_proxy=http://yourproxy:8080/ https_proxy=https://yourproxy:8080/ export http_proxy export https_proxy3、设置yum 的代理对于 yum 的代理,还要另外设置 /etc/yum.conf 文件vi /etc/yum.conf 添加以下代码:http_proxy=http://username:password@yourproxy:8080/ #若无密码限制,则为以下方式 http_proxy=http://yourproxy:8080/4、wget代理设置编辑文件为:/etc/wgetrcvi /etc/wgetrc添加下面两行:http_proxy=http://username:password@yourproxy:8080/ https_proxy=https://username:password@yourproxy:8080/ #若无密码限制,则为以下方式 http_proxy=http://yourproxy:8080/ https_proxy=https://yourproxy:8080/参考资料CentOS设置网络代理:https://blog.csdn.net/u013063153/article/details/78120945CentOS设置上网代理:https://blog.csdn.net/bohenzong1654/article/details/100964835?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control
2021年01月16日
763 阅读
0 评论
0 点赞
2021-01-15
Pytorch 实战:卷积神经网络(CNN)实现MINIST手写数字识别
实验环境torch = 1.6.0torchvision = 0.7.0matplotlib = 3.3.3 # 绘图用progressbar = 2.5 # 绘制进度条用easydict # 超参数字典功能增强使用数据集手写数字集MINIST导入相关的包# 导包 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader import torchvision from torchvision import datasets,transforms import matplotlib.pyplot as plt import random from progressbar import *设置超参数from easydict import EasyDict #增强python的dict的功能用 # 定义超参数 super_param = { "batch_size":256, "device": torch.device('cuda:0' if torch.cuda.is_available() else 'cpu'), "epochs":10, "lr":0.3, } super_param = EasyDict(super_param) print(super_param){'batch_size': 16, 'device': device(type='cuda', index=0), 'epochs': 10, 'lr': 0.3, 'hidden_num': 15}数据处理(下载、处理、加载数据到DataLoader)# 下载、加载数据 # 构transform(pipeline),对图像做处理 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,),(0.3081,)) #正则化 ]) # 下载数据 trainsets = datasets.MNIST('data',train=True,download=True,transform=transform) testsets = datasets.MNIST('data',train=False,download=True,transform=transform) # dataloader 加载数据 train_loader = DataLoader(trainsets,batch_size=super_param.batch_size,shuffle=True) test_loader = DataLoader(trainsets,batch_size=super_param.batch_size,shuffle=True)查看数据样例查看数据样例【单张】# 查看数据样例-单张 image,label = trainsets[random.randint(0,len(trainsets))] print('label=',label) plt.imshow(image.permute(1,2,0),cmap='gray') plt.show()查看数据样例【一批】# 查看数据样例-一批 images,labels = next(iter(test_loader)) data_sample_img = torchvision.utils.make_grid(images).numpy().transpose(1,2,0) print('labels=',labels) plt.figure(dpi=200) plt.xticks([]) plt.yticks([]) plt.imshow(data_sample_img) plt.show()构建CNN网络模型 -简单版- 使用Sequential## 构建CNN模型-简单版-使用Sequential model = nn.Sequential( nn.Conv2d(in_channels=1,out_channels=10,kernel_size=5,stride=1,padding=0),# b*1*28*28-->b*10*24*24 nn.ReLU(), nn.MaxPool2d(2),# b*10*24*24-->b*10*12*12 nn.Conv2d(10,20,3,1,0),# b*10*12*12-->b*20*10*10 nn.ReLU(), nn.Flatten(),#b*20*10*10-->b*2000 nn.Linear(2000,500),#b*2000-->b*500 nn.ReLU(), nn.Linear(500,10),#b*500-->b*10 nn.ReLU(), nn.Softmax(), ) print(model)Sequential( (0): Conv2d(1, 10, kernel_size=(5, 5), stride=(1, 1)) (1): ReLU() (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (3): Conv2d(10, 20, kernel_size=(3, 3), stride=(1, 1)) (4): ReLU() (5): Flatten(start_dim=1, end_dim=-1) (6): Linear(in_features=2000, out_features=500, bias=True) (7): ReLU() (8): Linear(in_features=500, out_features=10, bias=True) (9): ReLU() (10): Softmax(dim=None) )构建CNN网络模型 -使用自定义类# 构建网络模型 - 使用自定义类 class Digit_Rec(nn.Module): def __init__(self): super(Digit_Rec,self).__init__() self.conv1 = nn.Conv2d(1,10,5) #1:灰度图片的通道,10:输出通道,5:kernel self.relu1 = nn.ReLU() self.max_pool = nn.MaxPool2d(2,2) self.conv2 = nn.Conv2d(10,20,3) #10:输入通道,20:输出通道,3:Kernel self.relu2 = nn.ReLU() self.fc1 = nn.Linear(20*10*10,500) # 20*10*10:输入通道,500:输出通道 self.relu3 = nn.ReLU() self.fc2 = nn.Linear(500,10) # 500:输入通道,10:输出通道 self.relu4 = nn.ReLU() self.softmax = nn.Softmax(dim=1) def forward(self,x): batch_size = x.size(0) # x的格式:batch_size x 1 x 28 x 28 拿到了batch_size x = self.conv1(x) # 输入:batch*1*28*28 输出:batch*10*24*24 x = self.relu1(x) x = self.max_pool(x) # 输入:batch*10*24*24输出:batch*10*12*12 x = self.conv2(x) x = self.relu2(x) x = x.view(batch_size,-1) #fatten 展平 -1自动计算维度,20*10*10=2000 x = self.fc1(x) # 输入:batch*2000 输出:batch*500 x = self.relu3(x) x = self.fc2(x) # 输入:batch*500 输出:batch*10 x = self.relu4(x) output = self.softmax(x) # 计算分类后,每个数字的概率值 return output model = Digit_Rec() print(model)Digit_Rec( (conv1): Conv2d(1, 10, kernel_size=(5, 5), stride=(1, 1)) (relu1): ReLU() (max_pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (conv2): Conv2d(10, 20, kernel_size=(3, 3), stride=(1, 1)) (relu2): ReLU() (fc1): Linear(in_features=2000, out_features=500, bias=True) (relu3): ReLU() (fc2): Linear(in_features=500, out_features=10, bias=True) (relu4): ReLU() (softmax): Softmax(dim=1) )定义损失函数和优化器# 定义损失函数和优化 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.SGD(model.parameters(),lr=super_param.lr)定义模型训练单个epoch函数# 定义模型训练单个epoch函数 def train_model_epoch(model,train_loader,super_param,criterion,optimzer,epoch): model.train()#训练声明 for batch_index,(images,labels) in enumerate(train_loader): # 数据上device images,labels = images.to(super_param.device),labels.to(super_param.device) # 梯度清零 optimzer.zero_grad() # 前向传播 output = model(images) # 计算损失 loss = criterion(output,labels) # 反向传播,计算梯度 loss.backward() # 参数更新(优化) optimzer.step() # 打印训练参考信息,每1000个batch打印一次 if batch_index % 1000 == 0: print("Epoch:{} Batch Index(batch_size={}):{}/{} Loss:{}". format(epoch,super_param.batch_size,batch_index,len(train_loader),loss.item()))定义模型验证方法# 定义模型验证方法 def test_model(model,test_loader,super_param,criterion): model.eval()#测试声明 # 数据统计 correct_num,test_loss = 0.0,0.0 #正确数,测试损失 #定义进度条 widgets = ['模型测试中: ',Percentage(), ' ', Bar('#'),' ', Timer(),' ', ETA()] pbar = ProgressBar(widgets=widgets, maxval=100).start() # 取消计算梯度,避免更新模型参数 with torch.no_grad(): for batch_index,(images,labels) in enumerate(test_loader): # 数据上devics images,labels = images.to(super_param.device),labels.to(super_param.device) # 模型预测 output = model(images) # 计算测试损失 test_loss += criterion(output,labels).item() # 确定预测结果是哪个数字 pred = output.argmax(dim=1) #argmax返回 值,索引 dim=1表示要索引 # 统计预测正确数量 correct_num += pred.eq(labels.view_as(pred)).sum().item() #更新进度条进度 pbar.update(batch_index/len(test_loader)*100) #释放进度条 pbar.finish() #打印测试信息 test_loss = test_loss/len(test_loader.dataset) test_accuracy = correct_num / len(test_loader.dataset) print("Test --- Avg Loss:{},Accuracy:{}\n".format(test_loss,test_accuracy)) return test_loss,test_accuracy模型训练和测试# 模型训练和测试 #模型上device mode = model.to(super_param.device) #记录每个epoch的测试数据、用于绘图 epoch_list = [] loss_list = [] accuracy_list = [] for epoch in range(super_param.epochs): train_model_epoch(model,train_loader,super_param,criterion,optimizer,epoch) test_loss,test_accuracy = test_model(model,test_loader,super_param,criterion) # 数据统计 epoch_list.append(epoch) loss_list.append(test_loss) accuracy_list.append(test_accuracy)查看数据统计结果# 查看数据统计结果 fig = plt.figure(figsize=(12,12),dpi=70) #子图1 ax1 = plt.subplot(2,1,1) title = "bach_size={},lr={}".format(super_param.batch_size,super_param.lr) plt.title(title,fontsize=15) plt.xlabel('Epochs',fontsize=15) plt.ylabel('Loss',fontsize=15) plt.xticks(fontsize=13) plt.yticks(fontsize=13) plt.plot(epoch_list,loss_list) #子图2 ax2 = plt.subplot(2,1,2) plt.xlabel('Epochs',fontsize=15) plt.ylabel('Accuracy',fontsize=15) plt.xticks(fontsize=13) plt.yticks(fontsize=13) plt.plot(epoch_list,accuracy_list,'r') plt.show()
2021年01月15日
2,244 阅读
2 评论
0 点赞
1
...
20
21
22
...
24