自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TypeError the JSON object must be str, bytes or bytearray, not ‘list‘

分析可知,python中的列表如果要通过json库解析为jason对象,就会出现以上提示。意思是,jason的对象必须是字符串,字节或字节数组,不能是列表。如果将 a 通过 str(a),在调用 loads,则不会出现以上问题。在使用python的jason库时,偶然碰到以下问题。通过如下代码可复现问题。

2024-01-17 22:17:25 913

原创 windows编译TensorFlowServing

的某些源码文件时会遇到耗时特别长的问题,目前还不清楚是什么问题导致。表示将所有依赖的外部库源码下载到这个目录,且编译中生成的中间文件,缓存文件,静态库以及二进制文件均存放此目录。下的编译流程,配置环境,执行编译命令,根据编译器/链接器反馈的错误,修改相应的源码或者相关库文件的存放路径,编译出。该操作可让编译继续进行,但可能会导致调试信息缺失的问题,请谨慎操作。如遇到下载不成功,重复执行即可。选项,指定目录存放所有下载的源码文件,也可参考下一节中的。,这里采用64位的编译工具编译,解决虚拟内存不足的问题。

2024-01-17 19:02:55 1195

原创 matplotlib绘制动态瀑布图

网上找的大部分绘制瀑布图的代码,均无法呈现动态效果。不是动态的效果还能称为动态图吗?(疑问),博主自己摸索了一套绘制动态图的思路,这里全部代码贴出来,如果需要绘制用的数据,可以私信。绘制瀑布图思路:遍历指定文件目录下所有的csv文件,每读一个文件,取文件前20行数据进行保存,如果超过规定的行数300行,将最旧的数据删除,仅保留300行数据进行展示。

2024-01-15 09:42:33 552

原创 基于mps的pytorch 多实例并行推理

不开启mps服务下,相同任务的双进程耗时是单进程耗时的2倍,说明双进程是串行运行的。符合预期。开启mps服务下,相同让任务的双进程耗时是单进程耗时的1~1.3倍,说明两个进程在并发运行,但是有抢占某种资源的情况,无法做到接近单进程耗时,需要进一步研究。

2023-12-01 20:05:47 873 2

原创 csv文件导入mysql指定表中

需要将csv文件拷贝到指定地方,执行导入操作。查看有导入权限的目录位置。因此,在mysql数据库中建一个对应的表,以便导入该数据。准备导入的数据为151行5列的数据,其中第一行为标题行。如果有以上显示,则表示需要的表已经建好。当然,也可查看到导入的数据。

2023-11-10 16:31:37 293

原创 机器学习中的工作流机制

同样的数据,可能决策树效果不错,朴素贝叶斯也不错,SVM也挺好。有没有一种方法能够让我们用一份数据,同时训练多个模型,并用某种直观的方式(包括模型得分),观察到模型在既有数据上的效果?有的,管线工作流pipeline就是专门干这个的,再配上决策边界,所有模型只用一眼,就能确定优劣,选择你的梦中情模。从两个方面,左上角的模型得分,和图中颜色深浅,两种颜色的分解代表模型的决策边界。如果只看模型得分,那得分为100%的模型有5个,选再根据决策边界进一步确定更优秀的模型,为工程所用。机器学习中的工作流机制。

2023-08-04 17:01:01 536

原创 python工程中import要点提炼

主要留意解决方式中的第1,2点,相信这也是很多人能看到这里的原因。主打一个信息提炼,没有废话,就是情景展示vs解决方式。如果还不能解决你的问题,请留言讨论。

2023-05-06 10:23:51 504 1

原创 部署你的flask应用到docker

主要分三步,制作镜像并导出,导入镜像,启动flask应用。该教程没有采用Dockerfile的方式,因为是直接将开发用python环境包,拷贝到生产用环境包。但是当笔者用这种方式完成镜像的保存后,发现就一个环境包+不到10个python文件,磁盘占用已达到7~8G的大小。相信开发用的python包中有很多库,是该应用没有涉及到的。如果用Dockerfile的方式,就可以比较精准控制哪些包是必须的,从而放到镜像内。故提醒哪些关注镜像大小的朋友谨慎入坑。

2023-04-21 19:30:57 744

原创 有了chatgpt后,你再碰到RuntimeError

然而有了chatgpt, 以后这种问题,你不仅能找到答案,而且知道这个是什么问题,知其所以然。如果没有chatgpt,你遇到这种问题的时候,肯定是各种csdn,知乎一通翻找。初级的博客写手都可以退役了。

2023-04-16 19:48:15 127

原创 python中那些可以让你减少if-else的操作

这个函数通常使用在:当作为服务端接收客户端消息,而客户端的信息通常会设计成jason格式,而服务端解析成字典格式后,需要判断某个key是否在传过来的信息中。如果不使用这个函数,你会发现自己将需要使用很多if判断,或者静态断言。这样会让自己的代码结构臃肿不堪,如果采用setdefault可以先在消息检查函数中检查一遍,给某些约定好的字段一个默认值,就不用担心没有该字段的值,导致一些业务层面的错误。这样改后,消除了if判断,即使客户端没有正确的字段信息,也可以保证执行顺序按计划进行。

2023-04-08 19:40:09 535

原创 PyTorch使用一维卷积对时间序列数据分类

时间序列数据也就是自变量是时间的一维数据,平时接触到的y= x, y = sinx等都是可以认为是时间序列数据。本次实验使用的是波形数据,可以认为不同形态的反射波形代表不同的类别。以下分别是两种类别的数据集,和四种类别的数据集,同一种颜色代表同一种类别。由于pytorch的网络模型画网络结构不像tensorflow那么方便,需要转化为onnx模型,在用netron画出来,参考后面的源码。请注意,这里的DatasetOfDiv是需要为自己的数据集,继承Dataset这个类来实现。

2023-04-01 20:55:10 4925 27

原创 RuntimeError mat1 and mat2 shapes cannot be multiplied

1,dataloader中需要设置参数drop_last=True。即丢弃最后一个不足batchSize的样本。根据提示,全连接层两个需要相乘的矩阵维度不匹配,代码中batchSize为8,最后的类别数量为4。,样本总数不是批次的倍数,有余数,因此,最后一个批次的样本会产生该问题。,reshape时使用样本的数量。

2023-03-24 21:46:55 3251

原创 一个linux脚本实现flask服务掉线自动重启

其实笔者是很不愿意,ps这条命令出现很多次的,因此将该条命令制作程一个字符串。通过 eval $cmd1来执行ps这条命令,可以执行,但是获取不到进程号。因此,如果想去掉这么多冗余的命令,完全用字符串替代,也可以用第二个版本,这个版本根据命令执行后是否有返回来进行分支执行,但是代价看不到进程号。采用flask框架搭建的web服务,有时会因某些未知的原因,突然挂掉,导致客户端请求失效。推测原因有可能是这个服务程序本身的原因,又或者是有某些电脑监控程序发现监控到,某些暴露的端口不常用,因此将该进程杀掉。

2023-03-18 20:40:47 989

原创 和最小的K个数对

分析:观察一下解这套题逻辑,先把数组1的第一个数和数组2的第一个数组成一对,这就是第一个最小的数对。要么是数组1的第二个数和数组2的第一个数(5, 2)。所以不断根据上一个最小的数对,把比上一个数大一点的数加入到队列中,再进行比较,直到找出所有的k个最小的数对。给定两个递增排序的整数数组,从两个数组中各取一个数字u和v组成一个数对(u, v),请找出和最小的k个数对。例如,输入两个数组[1, 5, 13, 21]和[2, 4, 9,15],和最小的3个数对为(1, 2)、(1, 4) 和 (2, 5)。

2023-03-12 22:19:27 114

原创 memcpy不适用的场景

这段代码表示,在数据量较少的拷贝,比如16个字节以内,也就是4个整形数据的长度,采用一个循环赋值的方式,逐字节的将源地址的数据赋值到目的地址上,且忽略字节对齐和重叠的情况。假如,我们知道拷贝的数据是固定长的字节,比如一个整数,4个字节,那么采用memcpy也是可以的,但是显然,不需要做那么多循环操作,分4次将整数数据拷过去。这是曾经碰到一个面试题,当时没回答上来。那如果是小于16字节的拷贝,可以发现这个操作相当于是用一串宏定义去代替,宏定义是由预处理器展开,没有函数的参数压栈,减少调用开销,所以非常高效。

2023-03-05 20:43:53 578

原创 python的装饰器与设计模式中的装饰器模式

相信很多人在初次接触python中的装饰器时,会跟我一样有个疑问,这跟设计模式中的装饰器模式有什么区别吗?本质上是一样的,都是对现有对象,包括函数或者类的一种扩展。这篇文档将进行对比分析。

2023-02-26 21:54:38 470

原创 时序数据的分类及质心的计算

说到时序数据的处理,不得不提到 tslearn 这个库,ts当然是time series的简称。这个库提供了时序数据常用的分类,聚类,计算质心等操作,封装成易用的接口供大家使用。这里介绍对同一个数据采用两种思路实现分类的目的。引入两种时序数据,根据呈现的波峰形态进行分类即可。使用matplotlib画图工作绘制折线图如下红色波形和黑色波形是两种时序数据,是需要被分开的两种类别。使用深度学习模型分类可以采用多层感知机模型,输入层即设置为时序数据的长度,输出层则是类别的种类,这里是2。如果采用传统的机器学习的思

2023-02-19 22:08:06 789

原创 使用python进行数据分析的常用操作

搭配使用 np.where 和 np.take,比如在a中取标签列为 ‘aa’ 和 ‘bb’ 的样本数据显示效果如下。

2023-02-11 12:40:11 164

原创 网络训练需要的混合类型数据的组织方式

二维混合类型的数据组织,可以设置为 dict,numpy 的 array,pandas 的 DataFrame,但是不要组织为二维列表。numpy 的 cloumn_stack,用来在特征数据的基础上增加标签列。

2023-02-05 14:23:45 394

原创 卷积神经网络中的Conv层和BN层融合细节

输入数据的,BN 就是为了解决小批次输入数据的分布偏移而提出的,因此训练时需要BN层。而训练后的推理,是单样本输入,训练时 BN 的参数已经确定,这些参数相当于对前一层的特征图数据做一次线性变换,而卷积层也可以转化为对特征图的线性变换。因为将输入的样本数据或特征图,归一化后,改善了输入数据的分布,或者说。在训练时,卷积层和 BN 是两个模块,但是为什么训练时不能融合,而训练完成后,仅执行前向推理却可以融合?一张图可以解释,改善输入数据的分布,可以更容易找到模型参数w和b,从而加速模型收敛。

2023-01-29 17:43:55 2203

原创 用scipy解决最优化问题

题目:已知x+ y+ z= 1,求 x + y + z 的最小值这个问题相当于在约束条件下的极值问题的求解,在高等数学里,通用的方法是用拉格朗日乘子,通过求导的方式解决,这里使用scipy中的optimize模块来解决这个问题。结果输出与期望输出一致。

2023-01-22 20:51:13 718

原创 windows下jupyter中使用qt5演示动图

当然的解决思路是安装PyQt5,pip安装,都是基本操作。然而当安装好仍然这个错误,这时候pip安装Pyside这个模块可能并不顺利,因为没有匹配python3.6的包。如果有问题,那就是环境问题,比如降低matplotlib的版本,我就是从3.4降低到2.2.2。注意:当在浏览器运行以上程序,会另外生成绘图进程,实现动图演示。下载对应的安装包,离线安装即可。环境配置好了,可以跑通的案例。

2023-01-15 16:30:19 551

原创 pytorch中的模型剪枝

自定义剪枝可以自定义一个子类,用来实现具体的剪枝逻辑,比如对权重矩阵进行间隔性的剪枝在剪枝前查看网络结构采用自定义剪枝的方式对局部模块fc3进行剪枝输出结果最后的剪枝效果与实现的逻辑一致。

2023-01-08 20:24:12 3138

原创 tensorflow2.x多层感知机模型参数量和计算量的统计

采用graphviz和pydot模块,绘制网络模型结构采用keras_flops模块统计模型的计算量使用model.summary接口统计模型参数量使用psutil模块统计模型运行时的资源消耗情况参考文档python实现监控指定进程的cpu和内存使用率Python常用库之psutil使用指南如何计算 LSTM 的参数量tf.keras计算FLOPs。

2022-12-29 11:47:23 1281

原创 可视化性能分析器nvvp的安装

这里有一个坑,如果去官网下载最新的jdk17,安装(其实就是将解压后的目录添加到环境变量)后,会有如下报错。windows上安装完cuda后,nvvp程序在安装目录下了。如果有将该目录添加到环境变量,在命令行执行nvvp,可以看到类似如下提示。检查是否正常安装完成,在命令行输入java -version(在这个过程中不用手动添加环境变量)最后,命令行输入nvvp,可以正常启动性能分析界面。一句话总结,找到靠谱网站,下载并安装jdk8。,这里可以安全,愉快地下载到安装包。双击开始安装,更改安装目录。

2022-11-28 22:35:21 596

原创 cuda中关于占用率的计算

官方文档CUDA C++ Best Practices Guide中提到一个例子:对于7.0的设备,每个multiprocessor有65536个寄存器,且支持最大的并发线程束为64。可以使用官方提供的NVIDIA GPU Computing Toolkit\CUDA\v11.1\tools目录下的CUDA_Occupancy_Calculator.xls来计算相关参数。这里最重要的数据是每个SM上的活跃线程块,这个数值受两个方面的资源限制,一个是寄存器资源,一个是共享内存的资源。

2022-11-10 16:43:26 655

原创 windows上编译安装pytorch的c++扩展

需要在python的安装目录D:\Python36WindowsTensorflow\Python36\Lib\distutils\disutils.cfg中作如下改变(如果没有这个文件,自行创建即可)推测原因为,由于python和pytorch都是有msvc编译的出的静态库.lib和动态库.dll,如果采用g++链接,会由于不同编译器上对函数的编码规则,而无法找到相关的引用。在使用vs2015的编译工具cl.exe,由于对c++14中常量表达式的支持不好,会遇到很多错误。

2022-10-31 09:44:29 786

原创 ImportError: No module named ‘encodings’

扩展知识:PYTHONHOME是python标准库所在的地方,一般是用户安装python的地方,比如d:/Python36。而PYTHONPATH是静态模块导入的地方,自己写的python模块需要添加到PYTHONPATH,使用分号(;问题场景:在命令行执行python或d:\Python36\python.exe, 无法启动python解释器。解决途径:windows上设置环境变量PYTHONHOME即可。错误原因:环境变量的问题。

2022-10-25 14:20:24 3022

原创 tensorflow的模型使用flask制作windows系统服务

总结:在某些情况下无法使用nssm的方案,比如防火墙拦截等,这时可选择第二种方案。当然第二种方案的执行命令仍然需要python环境包,可以在此基础上将app.py和server.py两个文件打包成一个exe,方便移植。拆分的原因很明显,解耦合,方便其他模型做服务时,只在app.py内改动。将tensorflow模型的推理逻辑改写成flask服务,假设文件为app.py(推理模块)和server.py(服务模块)。, 模型的路径需要用绝对路径,相对路径可以注册服务,但无法正常启动服务(闪退)。

2022-10-21 09:31:24 660

原创 win10上使用gpu版的tensorflow

提示找不到cudart64_100.dll这个cuda运行时的库文件,推测是cuda11相对tensorflow2.0版本来说高了。一个讨巧的版本是找到cudart64_110.dll文件,将其复制,并改名,可以去掉错误,但这种方法后续使用时存在隐患。,安装好显卡驱动,cuda和cudnn。根据报错信息,缺少c++编译工具的动态库,需安装Visual c++ 2015。改名后,再次导入,没有错误,可以正常打印出版本信息。安装完成后,重新导入,出现新的报错。双击安装,只需安装8.1即可。至此,初步完成安装。

2022-10-11 14:10:50 693

原创 分布式注册服务中心

与redis的区别在于,redis是个内存数据库,而etcd自v3版本是磁盘数据库。很多key可以共享一个租约,一个租约设置一个ttl(过期时间),当这个租约过期了,挂到这个租约上的所有key就失效了。可以看到,按照分层模型,etcd 可分为 Client 层、API 网络层、Raft 算法层、逻辑层和存储层。公平锁是因为采用互斥锁,非公平锁是因为采用自旋锁。etcd是配置服务。etcd是一个分布式K-V数据库,是构建一个分布式系统的核心部分。事务开始之前读取的是B+树的数据,采用内存映射mmap的方式。

2022-10-02 20:59:41 710

原创 容器化管理k8s部署踩坑记录

一直重复出现这几句,显然是健康检查时,连接主机地址超时了。通过ifconfig查看自己的ip已经改变,输入了一个不可用的ip,更改后,sudo kubeadm reset,再次init,终于出现了想要的输出。由于xenial是ubuntu16.04的代号,而实验的机器是18.04,理应将xenial替换成bionic,但换过之后反而找不到源,于是再换回来。将改完后的config.toml文件移动到/etc/containerd/下(当然也可以直接在/etc/containerd/目录下建文件,再修改)

2022-09-30 09:56:33 1125

原创 一个案例学习bat和shell脚本的编写

有时候需要编写windows上的批处理文件,来代替命令行手动执行程序,虽然语法很简单,但是也需要一点时间来查找,编写,测试。这里介绍一个案例,批量执行多个python文件,只需要一个执行这个脚本,便自动完成所有测试。在目录./operators下有a.py,b.py,c.py,d.py等多个python文件,现在需要写一个脚本,分别在windows和linux下执行如下语句,即所有的python文件都将被执行两次(pr是脚本*.py内需要用的参数)。test.bat文件如下。同样功能的test.sh文件。

2022-09-26 10:00:37 1126

原创 docker镜像编译与docker-compose部署与编排

compose可以一次性启动不同的服务,如redis, nginx,msg_server用compose一次性启动。虚拟机用的是虚拟化的cpu,效率只有50%~60%。每个容器,或者进程会认为它可以用所有的资源,包括端口。一个镜像起了多个容器后,每个容器内修改的文件会保存,但不会影响原来的镜像。运行一个webserver的容器,由拉取的nginx镜像执行,后台开启服务,且开放80的端口。由于编译过程中用的源是官网的源,很耗时间,因此将本机用的阿里源文件拷进容器。再显示镜像的时候可以看到TAG为v2的版本。

2022-09-25 22:32:57 2389

原创 E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)

遇到以下报错:E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?解决方案:sudo rm /var/lib/apt/lists/locksudo rm

2022-05-18 17:28:00 262

原创 常见任务中的双重while循环的结构

重组数组问题可以表述为输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。核心代码如下void reorder(int *arr, int len){ if (arr == nullptr || len <= 0) return; int *bgn = arr; int *end = arr + len - 1; while (bgn < end) {

2022-05-17 20:34:05 1441

原创 编译期编程

自从c++98开始,可以使用循环和路径选择执行的方式,在程序编译期执行计算。比如计算一个数是否为素数,可以使用如下的模板来实现:template<unsigned p, unsigned d>struct DoIsPrime{ static constexpr bool value = (p%d != 0) && DoIsPrime<p, d-1>::value;};template<unsigned p>struct DoIsPri

2022-05-05 15:13:06 349

原创 玩转位运算

玩转位运算题目1,考察一个二进制表示的数,奇数位上的数字全部为1时,返回1。否则返回0。比如allOddBits(0xFFFFFFFD) = 0, allOddBits(0xAAAAAAAA) = 1。思路,先构造一个奇数位上都为1的数,即0xAAAAAAAA。 任何数,与这个数位与(&)后,奇数位为1的位置仍为1,为0的位置将为0;偶数位上的数将转化为0。再跟这个数异或,则满足要求的数将转化为0,不满足要求的数为非0。取反即可。int allOddBits(int x) { int a

2022-04-27 11:37:10 863

原创 位与运算&小于相等判断==的优先级

在编写函数,获取一个数的二进制表示中1的数量时,如果采用左移后与最高位为1的数,进行位与运算。那么运算符的优先级需要特别注意。完整函数如下,其中0x80000000表示32位整数中最高位为1的数,二进制表示为1000 0000 0000 0000 0000 0000 0000 0000int getNumOf1InBin1(int n){ int cnt = 0; while (n != 0){ if ((n & 0x80000000) == 0x8000000

2022-04-01 13:35:19 458

原创 初始化列表vs列表初始化

这两个概念如此相似,以至于很多时候都在混用。初始化列表是构造函数的周边概念,表示在执行构造函数中,先执行初始化列表,再执行函数体内的语句。构造函数的编写尽量采用初始化列表的方式,特别是类中有自定义类出现的时候。而且有些情况,必须采用初始化列表才能初始化成员变量,如类中有引用类型,类中有const成员变量时等。class myclass{public: myclass(int a, int b, int c):m_a(a),m_b(b),m_c(c) { std::c

2022-02-10 14:56:23 836

空空如也

空空如也

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

TA关注的人

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