源码地址:https://github.com/HiLab-git/SSL4MIS
目的
本文主要通过对github上源码的分析,学习半监督语义分割的思想,并通过代码提供的数据对比各个半监督方法的效果。
介绍
在语义分割领域,标注往往是比较困难的。因为掩膜标注要求和目标边缘紧密贴合,否则会带来边界上的额外损失。如下图: 相反的,未标注的数据量一般要远远多于标注的数据量。基于此,半监督方法的研究就至关重要了。 机器学习按数据标注情况可分为三种:监督学习,无监督学习和半监督学习。
监督学习:在有标记的情况下,对数据进行分类或回归。比如随机森林、SVM和目前流行的全卷积网络、循环神经网络都归为这一类;
无监督学习:没有给定事先标记过的范例,自动对输入的资料进行分类或分群。此类有很多机器学习算法,比如k-means、meanshift和PCA,一般通过核函数划分超空间;
半监督学习:在有部分标记的情况下,使用所有提供的数据,对输入进行分类和回归的方法。
实验
数据来源
本文实验采用19%标注数据,81%未标注数据进行训练与测试。数据来源为ACDC-Segmentation,该数据集为第戎大学采集的心脏核磁共振影像,标注类型为:背景区域,右心室腔,心肌层和左心室腔。我们使用后三类作为分割结果,使用dice和hd95作为评价指标进行实验。两个指标中,Dice对mask的内部填充比较敏感,而hausdorff distance 对分割出的边界比较敏感。
测量指标
Dice
dice是评价两个目标相关性的指标,又叫F1-score。平衡了召回率和精度的影响,是一个综合性指标。 D i c e = 1 r e c a l l − 1 + p r e c i s i o n − 1 = 2 T P 2 T P + F P + F N Dice=\frac {1} {recall^{-1}+precision^{-1}}=\frac {2TP} {2TP+FP+FN} D i c e = r e c a l l − 1 + p r e c i s i o n − 1 1 = 2 T P + F P + F N 2 T P
hausdorff distance
hausdorff distance是测量点集X的到另外一个集和Y最近点的最大距离。 结合下图直观的说,就是比较两点的距离,取更大值。
hd95(95% hausdorff distance)类似HD,但只取距离排序后的中间的95%距离,其目的是减轻特殊野点的影响。
监督学习(Baseline)
监督学习实验中使用Unet作为分割网络。下文对比方法中,除非指明,否则默认也使用Unet网络进行对照。监督学习流程如下:
监督损失包括Dice loss 和 Cross Entropy loss。 l o s s s u p e r v i s e d = l o s s C E ( X , Y ) + l o s s D i c e ( X , Y ) , l o s s C E ( X , Y ) = ∑ ( − Y log ( X ) + ( 1 − Y ) log ( 1 − X ) ) , l o s s D i c e ( X , Y ) = 1 − 2 ∣ X ⋂ Y ∣ X + Y loss_{supervised}=loss_{CE}(X,Y)+loss_{Dice}(X,Y), \\ loss_{CE}(X, Y) = \sum (-Y \log (X)+(1-Y) \log (1-X)), \\ loss_{Dice}(X, Y)=1-2 \frac {\left | X \bigcap Y\right | } {X+Y} l o s s s u p e r v i s e d = l o s s C E ( X , Y ) + l o s s D i c e ( X , Y ) , l o s s C E ( X , Y ) = ∑ ( − Y log ( X ) + ( 1 − Y ) log ( 1 − X ) ) , l o s s D i c e ( X , Y ) = 1 − 2 X + Y ∣ X ⋂ Y ∣ 其中,X表示网络预测输出,Y表示标注。 监督学习只使用19%的标注数据作为输入源,训练10000次,得到的结果如下:
其中,编号1、2、3分别代表三个分类。监督学习训练过程中Dice最好为81%,这个结果将作为基准。
下面介绍半监督方法。
半监督学习
相对于监督学习,半监督学习增加了一致性损失,用于测量未标注数据的分割结果并使其靠近某一种约束。 下面是具体的方案,除非特殊指明,否则参数条件和监督学习一致。
mean teacher (论文链接)
mean teacher 的一致性损失为: l o s s C o n s i s t e n c y = 1 n ∑ ( f ( X ) − f e m a ( X e m a ) ) 2 loss_{Consistency}= \frac {1} {n} \sum (f(X)-f_{ema}(X_{ema}))^{2} l o s s C o n s i s t e n c y = n 1 ∑ ( f ( X ) − f e m a ( X e m a ) ) 2 其中 f e m a f_{ema} f e m a 是无梯度分割网络, X e m a X_{ema} X e m a 是加噪原始数据。该约束可描述为:使用源图像得到的分割结果,和加噪图像得到的分割结果应该是一致的。
流程如下:
下面是代码分析:
volume_batch, label_batch = sampled_batch['image'], sampled_batch['label']
...
#加噪
noise = torch.clamp(torch.randn_like(unlabeled_volume_batch) * 0.1, -0.2, 0.2)
ema_inputs = unlabeled_volume_batch + noise
...
#正常结果
outputs = model(volume_batch)
outputs_soft = torch.softmax(outputs, dim=1)
#加噪结果
with torch.no_grad():
ema_output = ema_model(ema_inputs)
ema_output_soft = torch.softmax(ema_output, dim=1)
...
#一致性损失
consistency_loss = torch.mean((outputs_soft[args.labeled_bs:]-ema_output_soft)**2)
该方法训练效果如下: mean teacher 得到的最优Dice为82.7%。
uncertainty aware mean teacher(论文链接)
该方法相对于mean teacher,增加了一个不确定性掩膜mask。公式如下: l o s s C o n s i s t e n c y = l o s s m e a n t e a c h e r ∗ m a s k u n c e r t a i n t y = − ∑ ( Y log Y ) m a s k = { 1 u n c e r t a i n t y < t h 0 e l s e loss_{Consistency}=loss_{mean teacher}*mask \\ uncertainty=- \sum {(Y\log{Y})} \\ mask=\left\{\begin{matrix} 1 \qquad uncertainty
l o s s C o n s i s t e n c y = l o s s m e a n t e a c h e r ∗ m a s k u n c e r t a i n t y = − ∑ ( Y log Y ) m a s k = { 1 u n c e r t a i n t y < t h 0 e l s e
其中, u n c e r t a i n t y uncertainty u n c e r t a i n t y 由 X l o g ( X ) Xlog(X) X l o g ( X ) 函数构成,在X=0.36附近最大,两端最小。也就是说,预测图越接近0.36,不确定性越大,不确定性超过一定阈值就置零。
preds = torch.zeros([stride * T, num_classes, w, h]).cuda()
for i in range(T//2):
#带噪声输入
ema_inputs = volume_batch_r + \
torch.clamp(torch.randn_like(volume_batch_r) * 0.1, -0.2, 0.2)
with torch.no_grad():
preds[2 * stride * i:2 * stride *
(i + 1)] = ema_model(ema_inputs)
preds = F.softmax(preds, dim=1)
preds = preds.reshape(T, stride, num_classes, w, h)
preds = torch.mean(preds, dim=0)
#不确定性掩膜计算
uncertainty = -1.0 * torch.sum(preds*torch.log(preds + 1e-6),\
dim=1, keepdim=True)
结果如下: 最优Dice=84%。
interpolation consistency(论文链接)
该方法使用两张图像内插作为输入,如下: l o s s u n s u p e r v i s e d = M e a n ( o u t p u t m i x e d , f ( i n p u t m i x e d ) ) loss_{unsupervised}=Mean(output_{mixed},f(input_{mixed})) l o s s u n s u p e r v i s e d = M e a n ( o u t p u t m i x e d , f ( i n p u t m i x e d ) ) 其中,f是不带梯度的分割网络。
#混合输入 input_{mixed}
batch_ux_mixed = unlabeled_volume_batch_0 * \
(1.0 - ict_mix_factors) + \
unlabeled_volume_batch_1 * ict_mix_factors
#混合输入2
input_volume_batch = torch.cat(
[labeled_volume_batch, batch_ux_mixed], dim=0)
outputs = model(input_volume_batch)
outputs_soft = torch.softmax(outputs, dim=1)
with torch.no_grad():
ema_output_ux0 = torch.softmax(
ema_model(unlabeled_volume_batch_0), dim=1)
ema_output_ux1 = torch.softmax(
ema_model(unlabeled_volume_batch_1), dim=1)
#混合输出
batch_pred_mixed = ema_output_ux0 * \
(1.0 - ict_mix_factors) + ema_output_ux1 * ict_mix_factors
#混合输入和输出计算一致性损失
consistency_weight = get_current_consistency_weight(iter_num//150)
consistency_loss = torch.mean(
(outputs_soft[args.labeled_bs:] - batch_pred_mixed) ** 2)
效果如下: 最优Dice=82%。
最小熵约束(论文链接)
entropy minimization,损失如下: y = − ∑ ( p log p ) log ( C ) y=- \frac { \sum (p \log p)}{\log (C)} y = − log ( C ) ∑ ( p log p ) 该公式对输出概率进行最小熵约束,使得p接近0或1时损失较小。其中,C为常数。公式和上一个方法里mask的公式差不多,效果应该也比不上。
outputs = model(volume_batch)
outputs_soft = torch.softmax(outputs, dim=1)
...
# 对所有数据进行熵计算
consistency_loss = losses.entropy_loss(outputs_soft, C=4)
结果如下: 最优Dice=80%。
dv (论文没找到)
这个方法还不能用unet跑,作者说正在完善代码。所以本实验使用的是unet_dv网络。直接看结果:
最优Dice=81%。
对抗网络(论文链接)
该方法应用了对抗网络的思想,设计了一个鉴别器网络DAN。它的核心思想是对鉴别器训练。损失部分由一致性损失 L c L_{c} L c 和鉴别器损失 L d L_{d} L d 组成。假设现有数据集 X = ( X 1 , X 2 ) X=(X_{1},X_{2}) X = ( X 1 , X 2 ) ,其中已标注子集为 X 1 X_{1} X 1 ,未标注子集为 X 2 X_{2} X 2 ,它们由分割模型预测的结果分别为 X 1 X_{1} X 1 , Y 2 Y_{2} Y 2 ,那么一致性损失和鉴别器损失分别为: L d = f ( D ( X 1 , Y 1 ) , 1 ) + f ( D ( X 2 , Y 2 ) , 0 ) L c = f ( D ( X 2 , Y 2 ) , 1 ) L_{d}=f(D(X_{1},Y_{1}),1)+f(D(X_{2},Y_{2}),0) \\ L_{c}=f(D(X_{2},Y_{2}),1) L d = f ( D ( X 1 , Y 1 ) , 1 ) + f ( D ( X 2 , Y 2 ) , 0 ) L c = f ( D ( X 2 , Y 2 ) , 1 )
一致性损失为未标注数据和其预测结果,假定计算机预测结果都为真。
鉴别器损失假定人工标注是真,计算机预测是假。两者是相互对抗的。 对抗网络流程图如下: 代码分析如下,这里只分析最关键的鉴别器损失计算:
#假设标注的数据都为真,未标注数据为假
DAN_target = torch.tensor([0] * args.batch_size).cuda()
DAN_target[:args.labeled_bs] = 1
...
# 未标注数据为真,形成对抗,注意这里使用的是DAN_target[:args.labeled_bs]
# 而不是DAN_target[args.labeled_bs:]
DAN_outputs = DAN(
outputs_soft[args.labeled_bs:], volume_batch[args.labeled_bs:])
consistency_loss = F.cross_entropy(
DAN_outputs, (DAN_target[:args.labeled_bs]).long())
...
#鉴别器损失计算,假设标注的数据都为真,未标注数据为假
DAN_outputs = DAN(outputs_soft, volume_batch)
DAN_loss = F.cross_entropy(DAN_outputs, DAN_target.long())
效果如下: 最优Dice=83%。
总结
总的来说,半监督学习方法最终结果都要比基准好。效果最好的是uncertainty aware mean teacher,Dice=84%,原因可能是它用了比较多的约束条件;最少迭代的是对抗网络,它在大概4000次迭代的时候就已经达到最好效果,但具体是不是训练最快的,还要等进一步验证。
你可能感兴趣的:(python,pytorch,深度学习,pytorch)
33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
摘星月为妆。
Python从入门到精通 正则表达式
33.从入门到精通:Python3正则表达式re.match函数re.search方法re.match与re.search的区别Python3正则表达式re.match函数re.search方法re.match与re.search的区别Python3正则表达式在Python3中,可以使用re模块来进行正则表达式的匹配和处理。以下是一个简单的例子,说明如何使用re模块进行正则表达式匹配:import
Python与Web 3.0:重新定义数字身份验证的未来
Echo_Wish
Python! 实战! python 前端 开发语言
Python与Web3.0:重新定义数字身份验证的未来随着Web3.0的迅猛发展,传统的身份验证方式正面临越来越大的挑战。从依赖中心化服务器存储用户数据,到如今去中心化、用户掌控数据的新时代,身份验证系统经历了前所未有的变革。而作为一个人工智能、区块链和Python技术的深度爱好者,我认为Python将成为构建Web3.0身份验证系统的重要工具。今天,我们就来聊聊如何结合Python与Web3.0
python中re.search()函数的用法
前行的zhu
pytorch 正则表达式 正则表达式 python
说到使用正则匹配字符串,就不得不说三个常用的匹配检索方法:re.search(),re.match()和re.findall()。主要的区别是前两个方法只在目标字符串中匹配一次满足条件的正则表达式;而re.findall()方法匹配目标字符串中所有满足条件的正则表达式;另外re.match()只会匹配目标字符串开头是否满足正则表达式,若开头不满足则匹配失败,函数返回None;而re.search(
python 中 Re库 函数 re.search()
weixin_43964993
python python
re.search(pattern,string,flags=0)在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象pattern:正则表达式的字符串或原生字符串表示string:待匹配字符串flags:正则表达式使用时的控制标记常用标记说明re.I re.IGNORECASE忽略正则表达式的大小写,[A‐Z]能够匹配小写字符re.M re.MULTILINE正则表达式中的^操作
python中search用法_Python中的python re.search方法详解
weixin_39688856
python中search用法
re.search扫描整个字符串并返回第一个成功的匹配,若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个。re.search()方法用来精确匹配并提取第一个符合规律的对象,而对象内容的提取则使用search方法的属性group()来实现。函数语法:re.search(pattern,string,fla
pandas 读写excel
jimox_ai
pandas
在Python中,使用Pandas库读写Excel文件是一个常见的操作。Pandas提供了`read_excel`和`to_excel`方法来分别实现读取和写入Excel文件的功能。以下是一些基本的示例:###读取Excel文件```pythonimportpandasaspd#读取Excel文件df=pd.read_excel('path_to_your_excel_file.xlsx')#显示
从LLM出发:由浅入深探索AI开发的全流程与简单实践(全文3w字)
码事漫谈
AI 人工智能
文章目录第一部分:AI开发的背景与历史1.1人工智能的起源与发展1.2神经网络与深度学习的崛起1.3Transformer架构与LLM的兴起1.4当前AI开发的现状与趋势第二部分:AI开发的核心技术2.1机器学习:AI的基础2.1.1机器学习的类型2.1.2机器学习的流程2.2深度学习:机器学习的进阶2.2.1神经网络基础2.2.2深度学习的关键架构2.3Transformer架构:现代LLM的核
大话 Python:python 操作 excel 系列 -- pandas 读取、分析、保存
2401_84140734
程序员 python excel pandas
read_excel()直接读取excel文件df=pd.read_excel(‘C:/test.xlsx’)4,读取当前字段计算后生成新字段获取原有字段paymount值paymount=df[‘paymount’]业务计算(金额-10)paymount_new=paymount-10添加新字段paymount_newdf[‘paymount_new’]=paymount_new这个步骤可以加入
python简单案例代码,python案例讲解视频
2401_84471631
python
这篇文章主要介绍了python简单案例代码,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。Python是一种高级,解释性,交互式且面向对象的脚本语言。Python的设计具有很高的可读性。它使用英语作为关键字,相对于而其他语言则使用标点符号作为语句结束不同,是依靠缩进作为结束。并且其语法结构比其他语言精简。Python是Web开发,游戏开发
Python爬虫实战教程——如何爬取多个国家的实时汇率数据
Python爬虫项目
2025年爬虫实战项目 python 爬虫 chrome 信息可视化
1.引言随着全球经济一体化,跨国交易和投资变得越来越普遍,实时汇率数据成为了金融领域和国际贸易中的关键数据。对于金融分析师、投资者或者是开发者来说,能够实时获取并分析汇率数据是至关重要的。本文将深入探讨如何使用Python爬虫技术抓取多个国家的实时汇率数据。我们将使用最新的技术和工具,介绍如何通过Python编写一个高效、可扩展的汇率数据爬虫。2.为什么需要实时汇率数据?汇率数据被广泛应用于以下几
漫画算法python篇pdf_用Python抓取漫画并制作mobi格式电子书
jian bao
漫画算法python篇pdf
想看某一部漫画,但是用手机看感觉屏幕太小,用电脑看吧有太不方面。正好有一部Kindle,决定写一个爬虫把漫画爬取下来,然后制作成mobi格式的电子书放到kindle里面看。本人对于Python学习创建了一个小小的学习圈子,为各位提供了一个平台,大家一起来讨论学习Python。欢迎各位到来Python学习群:943752371一起讨论视频分享学习。Python是未来的发展方向,正在挑战我们的分析能力
python的格式转换库_3个Python PDF库,提取信息、转换格式、分割剪裁有它就够了!...
来朝三博士
python的格式转换库
PDFMiner:PDFMiner是一个从PDF文档中提取信息的工具。与其他PDF相关的工具不同,它只用于获取和分析文本数据。PDFMiner能获取页面中文本的准确位置,以及字体或行等其他信息。它还有一个PDF转换器,可以将PDF文件转换成其他文本格式(如HTML)。还有一个可扩展的解析器PDF,可以用于文本分析以外的其他用途。(地址https://github.com/euske/pdfmine
使用python去编写PDF转换成为EPUB以及MOBI工具
winfredzhang
python pdf 转换 EPUB MOBI
在数字时代,PDF格式因其可靠性和跨平台特性成为了文档分享的标准。然而,当我们需要在电子阅读器上阅读这些文档时,转换为EPUB或MOBI格式会提供更好的阅读体验。今天,我们将深入分析一个使用Python和wxPython开发的PDF转换工具,探讨其实现原理和技术细节。C:\pythoncode\new\ConvertPdfToEpub.py需求分析在开始编码之前,让我们明确需求:用户友好的界面,允
Ubuntu安装开发者平台Backstage
xuhss_com
计算机 计算机
Python微信订餐小程序课程视频https://edu.csdn.net/course/detail/36074Python实战量化交易理财系统https://edu.csdn.net/course/detail/35475Ubuntu安装开发者平台Backstage什么是Backstage?Backstage是一个构建开发者门户的开源平台。通过支持一个集中的软件分类,Backstage可以保存
go python 比较 devops_5 大 DevOps 工具,你用过几个?
weixin_39692271
go python 比较 devops
DevOps的概念在软件开发行业中逐渐流行起来。越来越多的团队希望实现产品的敏捷开发,DevOps使一切成为可能。有了DevOps,团队可以定期发布代码、自动化部署、并将持续集成/持续交付作为发布过程的一部分。虽然DevOps背后有各种各样的概念,但幸好有一些工具可以让你更容易地理解和实现。在本文中,你将了解这些工具,并将它们作为软件发布/维护工具包工作的一部分开始使用。DevOps有很多可使用的
python中beautifulsoup怎么安装_Python3爬虫中Beautiful Soup库的安装方法是什么
柳虎璐
Python3 BeautifulSoup 安装教程 lxml 爬虫
Python3爬虫中BeautifulSoup库的安装方法是什么发布时间:2020-08-0517:38:09来源:亿速云阅读:70作者:小新这篇文章将为大家详细讲解有关Python3爬虫中BeautifulSoup库的安装方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。BeautifulSoup是Python的一个HTML或XML的解析库,我们可以用它
如何减少跨团队交付摩擦?——基于 DevOps 与敏捷的最佳实践
网罗开发
实战 实战源码 devops 运维
网罗开发(小红书、快手、视频号同名) 大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者:《ESP32-C3物联网工程开发实战》图书作者:《SwiftUI入门,进阶与实战》超级个体:CO
Python进行DevOps实践
黑夜照亮前行的路
python devops 开发语言
使用Python进行DevOps实践可以涉及多个方面,从自动化部署、配置管理、监控到日志分析等等。下面是一些具体的方法和实践,展示如何使用Python在DevOps环境中进行工作:1.自动化部署使用Python编写自动化部署脚本,可以极大地提高部署效率。例如,可以使用fabric或paramiko等库来远程执行命令,或者使用Ansible这样的自动化工具,它本身使用Python编写,并提供了丰富的
java实现卷积神经网络CNN(附带源码)
Katie。
Java 实战项目 java
Java实现卷积神经网络(CNN)项目详解目录项目概述1.1项目背景与意义1.2什么是卷积神经网络(CNN)1.3卷积神经网络的应用场景相关知识与理论基础2.1神经网络与深度学习概述2.2卷积操作与卷积层原理2.3激活函数与池化层2.4全连接层与损失函数2.5前向传播、反向传播与梯度下降项目需求与分析3.1项目目标3.2功能需求分析3.3性能与扩展性要求3.4异常处理与鲁棒性考虑系统设计与实现思路
批量安装 Python 库的脚本:提高python学习效率的第一步(附源码)
TAGRENLA
Interesting python project python 学习 开发语言
批量安装Python库批量安装Python库的脚本:提高数据分析效率的一步(附源码)批量安装脚本前提条件使用pip:Python包管理工具批量安装脚本查看当前python解释器中安装的所有的库批量安装Python库的脚本:提高数据分析效率的一步(附源码)在现代数据分析领域,Python已成为一个不可或缺的工具。为了进行数据处理、分析、可视化和建模等任务,Python社区涌现出了众多强大的库和工具。
Python 简单后台项目的脚手架
程序媛了了
python 开发语言
说明近期写了一个简单的项目,在后台运行获取网上的期货数据并保存到相应的数据库里。由于之前工作很多这种简单的类似调用接口或攫取数据的项目都是用Python来写,因此这次也继续用Python写。但是这次更换了几个包,此份文档简单来说明一下。依赖的包toml:用户解析配置文件,配置文件用的是toml格式。arrow:用于处理日期相关。loguru:用于日志处理。requests:用于http请求响应。p
构建我们的Python代码库依赖图
openwin_top
python编程示例系列二 python 开发语言
构建我们的Python代码库依赖图作者:GeorgeFarcasiu,NoahKim,JaconBrugh,JiahaoLi,HudsonRiverTrading引言与我们在高频交易的根基保持一致,HudsonRiverTrading(HRT)行动迅速。与任何工程指标一样,速度有其权衡。在过去的五年中,由于一种通常更重视“足够好”而非“完美”的工程文化,一个鼓励团队间代码共享的协作工作环境,以及一
python 重构 Python 代码
隔壁小红馆
python cpython python面试 python cpython
将for循环转换为list/dictionary/set表达式我们在时经常遇到的一个情况是,创建一个值的集合。比如我们创建一个列表,然后迭代地用值填充它,这里我们想创建一个立方数字的列表。大多数语言的标准方法如下:cubes=[]foriinrange(20):cubes.append(i**3)在Python中,我们可以使用列表表达式,生成需要的数据。就可以将代码简化为一行,省去定义列表,然后再
python代码重构技巧_Python代码重构指南,老师Bryan Beecham完结
weixin_39916479
python代码重构技巧
本套课程由BryanBeecham,全球知名敏捷开发教练主讲的:Python代码重构指南。重构是软件改进的核心,它使软件拥有更好的结构和性能,也使代码更易于理解、修改和扩展。尽管重构并不是新事物,但是软件开发人员仍然会苦恼于如何正确地进行重构。随着敏捷运动的发展,DevOps之类的概念不断追求高质量和精心设计的代码,以实现更快的部署和反馈。不过,现有的很多关于重构的教程都基于Java语言,关于Py
python读取excel数字数据是object类型_Python使用反射实现Excel与对象之间的转换
weixin_39638859
Python使用反射实现Excel与对象之间的转换代码在最下方,伸手党直接滚动到最后场景需要从Excel中加载到内存中,转换为class对象执行操作环境Python3.8openpyxl==3.0.5前置知识反射(仅介绍这个帮助类用到的几个反射方法)setattr、getattrclassPerson():name=Nonedef__init__(self,name):self.name=name
python语言对代码的块结构不敏感_浅谈python(二)--python代码规范
初夏之菡
对于每一门语言来说,都有自己的编码规则,编程时是不可以违背这些准则的,一旦不遵守这个准则,程序就会报错无法执行,本节将介绍下python的一些编码规则。1、代码缩进与冒号首先介绍下代码缩进有什么用处,代码缩进是指通过在一行代码的前输入若干空格或者制表符来表示行与行之间的层次关系,每一种编程语言一般都需要代码缩进进行规范程序代码的层次结构,让代码清晰易于解读。对于其它的语言来说,代码缩进作为一种良好
Python编码系列—Python代码重构:提升代码质量
学步_技术
Python编码 python 重构 开发语言
欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。探索专栏:学步_技术的首页——持续学习,不断进步,让学习成为我们共同的习惯,让总结成为我们前进的动力。技术导航:人工智能:深入探讨人工智能领域核心技术。自动驾驶:分享自动
【python】函数重构
划过手的泪滴t
python 每日一练 云计算运维 python 重构 服务器 开发语言 每日一练 运维
函数重构函数重构pycharm函数重构步骤函数重构练习函数重构函数重构是指对现有函数进行修改和优化的过程。重构的目的是改善代码的可读性、可维护性和灵活性,同时保持其功能不变。函数重构通常包括以下步骤:理解函数的功能和目的。了解函数的作用和期望结果,确定重构的目标。检查函数的代码质量。查看函数的代码是否清晰、简洁、可读,有无可改进之处。提取重复的代码。如果函数中有重复的代码块,可以将其提取为单独的函
Python入门实战:Python的代码重构
AI智能涌现深度研究
DeepSeek R1 & 大数据AI人工智能 大数据 人工智能 语言模型 AI LLM Java Python 架构设计
1.背景介绍Python是一种基于社区发展、易用性、生态系统完善、可扩展性强、性能卓越等特点的高级编程语言。作为一门解释型语言,它具有高效率、简洁语法、丰富的库函数、跨平台能力和多种开发范式等优点。但随着项目不断迭代更新,代码量逐渐增加,导致代码结构混乱、缺乏模块化设计、重复逻辑过多、命名不规范等问题。如何有效地组织、管理和维护代码、提升代码质量、更好地实现功能,是一个技术人的日常工作。如何进行代
python提取excel数据批量生成固定格式的word文件的问题
鱼弦
【HOT】技术热谈 excel word
鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)使用Python从Excel中提取数据并生成固定格式的Word文档1.介绍本项目旨在介绍如何使用Python从Excel中提取数据并生成固定格式的Word文档
戴尔笔记本win8系统改装win7系统
sophia天雪
win7 戴尔 改装系统 win8
戴尔win8 系统改装win7 系统详述
第一步:使用U盘制作虚拟光驱:
1)下载安装UltraISO:注册码可以在网上搜索。
2)启动UltraISO,点击“文件”—》“打开”按钮,打开已经准备好的ISO镜像文
BeanUtils.copyProperties使用笔记
bylijinnan
java
BeanUtils.copyProperties VS PropertyUtils.copyProperties
两者最大的区别是:
BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。
既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProp
MyEclipse中文乱码问题
0624chenhong
MyEclipse
一、设置新建常见文件的默认编码格式,也就是文件保存的格式。
在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。
在简体中文系统下,ANSI 编码代表 GBK编码;在日文操作系统下,ANSI 编码代表 JIS 编码。
Window-->Preferences-->General -
发送邮件
不懂事的小屁孩
send email
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
动画合集
换个号韩国红果果
html css
动画 指一种样式变为另一种样式 keyframes应当始终定义0 100 过程
1 transition 制作鼠标滑过图片时的放大效果
css
.wrap{
width: 340px;height: 340px;
position: absolute;
top: 30%;
left: 20%;
overflow: hidden;
bor
网络最常见的攻击方式竟然是SQL注入
蓝儿唯美
sql注入
NTT研究表明,尽管SQL注入(SQLi)型攻击记录详尽且为人熟知,但目前网络应用程序仍然是SQLi攻击的重灾区。
信息安全和风险管理公司NTTCom Security发布的《2015全球智能威胁风险报告》表明,目前黑客攻击网络应用程序方式中最流行的,要数SQLi攻击。报告对去年发生的60亿攻击 行为进行分析,指出SQLi攻击是最常见的网络应用程序攻击方式。全球网络应用程序攻击中,SQLi攻击占
java笔记2
a-john
java
类的封装:
1,java中,对象就是一个封装体。封装是把对象的属性和服务结合成一个独立的的单位。并尽可能隐藏对象的内部细节(尤其是私有数据)
2,目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而使软件错误能够局部化,减少差错和排错的难度。
3,简单来说,“隐藏属性、方法或实现细节的过程”称为——封装。
4,封装的特性:
4.1设置
[Andengine]Error:can't creat bitmap form path “gfx/xxx.xxx”
aijuans
学习Android遇到的错误
最开始遇到这个错误是很早以前了,以前也没注意,只当是一个不理解的bug,因为所有的texture,textureregion都没有问题,但是就是提示错误。
昨天和美工要图片,本来是要背景透明的png格式,可是她却给了我一个jpg的。说明了之后她说没法改,因为没有png这个保存选项。
我就看了一下,和她要了psd的文件,还好我有一点
自己写的一个繁体到简体的转换程序
asialee
java 转换 繁体 filter 简体
今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。
实现的思路是重载request的调取参数的几个方法,然后做下转换。
android意图和意图监听器技术
百合不是茶
android 显示意图 隐式意图 意图监听器
Intent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图;不指明调用的名称,根据设
spring3中新增的@value注解
bijian1013
java spring @Value
在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件中的文件,进行键值对的注入,例子如下:
1.首先在applicationContext.xml中加入:
<beans xmlns="http://www.springframework.
Jboss启用CXF日志
sunjing
log jboss CXF
1. 在standalone.xml配置文件中添加system-properties:
<system-properties> <property name="org.apache.cxf.logging.enabled" value=&
【Hadoop三】Centos7_x86_64部署Hadoop集群之编译Hadoop源代码
bit1129
centos
编译必需的软件
Firebugs3.0.0
Maven3.2.3
Ant
JDK1.7.0_67
protobuf-2.5.0
Hadoop 2.5.2源码包
Firebugs3.0.0
http://sourceforge.jp/projects/sfnet_findbug
struts2验证框架的使用和扩展
白糖_
框架 xml bean struts 正则表达式
struts2能够对前台提交的表单数据进行输入有效性校验,通常有两种方式:
1、在Action类中通过validatexx方法验证,这种方式很简单,在此不再赘述;
2、通过编写xx-validation.xml文件执行表单验证,当用户提交表单请求后,struts会优先执行xml文件,如果校验不通过是不会让请求访问指定action的。
本文介绍一下struts2通过xml文件进行校验的方法并说
记录-感悟
braveCS
感悟
再翻翻以前写的感悟,有时会发现自己很幼稚,也会让自己找回初心。
2015-1-11 1. 能在工作之余学习感兴趣的东西已经很幸福了;
2. 要改变自己,不能这样一直在原来区域,要突破安全区舒适区,才能提高自己,往好的方面发展;
3. 多反省多思考;要会用工具,而不是变成工具的奴隶;
4. 一天内集中一个定长时间段看最新资讯和偏流式博
编程之美-数组中最长递增子序列
bylijinnan
编程之美
import java.util.Arrays;
import java.util.Random;
public class LongestAccendingSubSequence {
/**
* 编程之美 数组中最长递增子序列
* 书上的解法容易理解
* 另一方法书上没有提到的是,可以将数组排序(由小到大)得到新的数组,
* 然后求排序后的数组与原数
读书笔记5
chengxuyuancsdn
重复提交 struts2的token验证
1、重复提交
2、struts2的token验证
3、用response返回xml时的注意
1、重复提交
(1)应用场景
(1-1)点击提交按钮两次。
(1-2)使用浏览器后退按钮重复之前的操作,导致重复提交表单。
(1-3)刷新页面
(1-4)使用浏览器历史记录重复提交表单。
(1-5)浏览器重复的 HTTP 请求。
(2)解决方法
(2-1)禁掉提交按钮
(2-2)
[时空与探索]全球联合进行第二次费城实验的可能性
comsci
二次世界大战前后,由爱因斯坦参加的一次在海军舰艇上进行的物理学实验 -费城实验
至今给我们大家留下很多迷团.....
关于费城实验的详细过程,大家可以在网络上搜索一下,我这里就不详细描述了
在这里,我的意思是,现在
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
daizj
oracle ORA-12154
用easy connect连接出现“tns无法解析指定的连接标示符”的错误,如下:
C:\Users\Administrator>sqlplus username/
[email protected] :1521/orcl
SQL*Plus: Release 10.2.0.1.0 – Production on 星期一 5月 21 18:16:20 2012
Copyright (c) 198
简单排序:归并排序
dieslrae
归并排序
public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int
C语言中字符串的\0和空格
dcj3sjt126com
c
\0 为字符串结束符,比如说:
abcd (空格)cdefg;
存入数组时,空格作为一个字符占有一个字节的空间,我们
解决Composer国内速度慢的办法
dcj3sjt126com
Composer
用法:
有两种方式启用本镜像服务:
1 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置)。见“例1”
2 将以下配置信息添加到你的项目的 composer.json 文件中(针对单个项目配置)。见“例2”
为了避免安装包的时候都要执行两次查询,切记要添加禁用 packagist 的设置,如下 1 2 3 4 5
高效可伸缩的结果缓存
shuizhaosi888
高效可伸缩的结果缓存
/**
* 要执行的算法,返回结果v
*/
public interface Computable<A, V> {
public V comput(final A arg);
}
/**
* 用于缓存数据
*/
public class Memoizer<A, V> implements Computable<A,
三点定位的算法
haoningabc
c 算法
三点定位,
已知a,b,c三个顶点的x,y坐标
和三个点都z坐标的距离,la,lb,lc
求z点的坐标
原理就是围绕a,b,c 三个点画圆,三个圆焦点的部分就是所求
但是,由于三个点的距离可能不准,不一定会有结果,
所以是三个圆环的焦点,环的宽度开始为0,没有取到则加1
运行
gcc -lm test.c
test.c代码如下
#include "stdi
epoll使用详解
jimmee
c linux 服务端编程 epoll
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linu
Hibernate对Enum的映射的基本使用方法
linzx0212
enum Hibernate
枚举
/**
* 性别枚举
*/
public enum Gender {
MALE(0), FEMALE(1), OTHER(2);
private Gender(int i) {
this.i = i;
}
private int i;
public int getI
第10章 高级事件(下)
onestopweb
事件
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
孙子兵法
roadrunners
孙子 兵法
始计第一
孙子曰:
兵者,国之大事,死生之地,存亡之道,不可不察也。
故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五
曰法。道者,令民于上同意,可与之死,可与之生,而不危也;天者,阴阳、寒暑
、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法
者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知之者不胜。故校
之以计,而索其情,曰
MySQL双向复制
tomcat_oracle
mysql
本文包括:
主机配置
从机配置
建立主-从复制
建立双向复制
背景
按照以下简单的步骤:
参考一下:
在机器A配置主机(192.168.1.30)
在机器B配置从机(192.168.1.29)
我们可以使用下面的步骤来实现这一点
步骤1:机器A设置主机
在主机中打开配置文件 ,
zoj 3822 Domination(dp)
阿尔萨斯
Mina
题目链接:zoj 3822 Domination
题目大意:给定一个N∗M的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望。
解题思路:大白书上概率那一张有一道类似的题目,但是因为时间比较久了,还是稍微想了一下。dp[i][j][k]表示i行j列上均有至少一枚棋子,并且消耗k步的概率(k≤i∗j),因为放置在i+1~n上等价与放在i+1行上,同理