• [技术干货] 360浏览器默认极速模式打开
    360浏览在内核设置切换锁定的情况下,只能手动点击切换极速模式,RPA常用操作有以下2种方式:1:通过Click控件进行点击切换并不稳定(本人测试就没成功过)。2:通过图片点击进行切换,在Studio开发和测试时没有问题,但是发布到管理中心,通过执行器无人值守在服务器上测试时,一直提示图片屏幕不匹配,失败告终。最后,在查看如何选择内核后,发现可以通过命令来强制以极速模式启动,可点击查看,方法如下:新建一个txt,将需要访问的地址写入,然后通过 runAppProgram执行该命令语句,等待程序结束选择Flase,再通过OpenUrl打开访问地址,则是默认极速模式了。
  • [获奖公告] 【云声·建议】5月反馈优化建议,领开发者定制双肩包
    23年【云声·建议】反馈活动第五场来啦~小编这次准备了帅气的开发者定制双肩包和连帽卫衣快叫上你的小伙伴一起来云声提建议吧!云声建议入口PS:华为云产品相关的有效建议分值更高,积分排名更容易靠前哟~【活动时间】5月1日-5月31日【活动对象】所有华为云用户如果您是新用户您也可以先去体验我们的免费云产品服务~再来吐吐槽~比如【DevRun】物联网低代码应用开发训练营【DevRun】低代码企业应用实践创造营如果您是老用户功能问题?体验不好?快来云声告诉我们吧!!云声建议入口(点击即可提交建议)【奖项设置】有效建议总积分> 5:300元开发者大礼包(定制双肩包+定制卫衣+棒球帽)5≥ 有效建议总积分≥ 2 : 100元开发者大礼包(定制卫衣+棒球帽)PS:满足发放条件的前10名用户均可获得奖励~   ​(卫衣黑白色随机)【活动规则】1.有效建议积分云声关联产品/功能分为云产品建议、解决方案建议、平台建议,三种类型的建议对应的分值不相同,云产品建议(1分)、解决方案建议(0.5分)、平台建议(0.2分),按照当月有效建议类型对应不同分值以及邀请加分项来进行计算总排名,关联产品/功能可在云声提建议页面查看,示例如下;2.邀请用户加分a.每成功邀请一个用户,邀请者和被邀请者额外加0.2分,邀请加分可叠加,禁止互相推荐,否则双方都取消加分b.被邀请者在云声提交建议后,需要在本条帖子下方评论“被XXX邀请参加云声5月活动”,本此邀请才被认为有效邀请(5月双方都有在云声上提建议)示例:用户A邀请用户B参与云声建议反馈活动,用户B在云声提交优化建议后,在本帖下面评论“被A邀请参加云声5月活动”,则A和B用户各加0.2分c.邀请者和被邀请者双方需要完成华为云官方平台实名认证,否则为无效邀请3.注意事项a.若出现积分相同且排名一致的情况,在每月的已实现和已采纳建议中,会选出价值更高的建议用户给予奖励,基础评分计算规则,可参考如下表格。若同名次出现同分情况,由内部工作人员评选建议价值度更高的用户获奖以上建议数仅做示例,与实际情况无关,仅做计算参考b.同一用户在同一页面(文档)提出的同一类问题(包括但不限于错别字、语句不通顺、视觉体验等),在通过审核后仅算作一条有效建议数c.若发现代他人提交优化建议,此建议分值只取原分值30%d.如遇商品缺货,将随机换成其他等价值礼品发放【优质建议示例】建议示例1:建议示例2:
  • [其他] 华为云践行AI落地案例合集
    从环保、物流到生物医药,看华为云如何践行AI落地 Al技术在抗yi、保护雨林和治理污水方面表现出色,它的广泛应用可以带来各行各业生产效率的巨大提升。随着Al技术的进一步推广和应用,我们可以预见,各行各业的生产效率将会得到进一步提高,人们的生活质量也将得到进一步改善。文章简介AI助力“抗yi”,超大规模计算机辅助药物筛选技术解读短时间完成上千万次的模拟计算,让耗时数月的计算机辅助药物筛选在数小时内完成。为机场安上一双“慧眼”,消灭飞机的“黑色十分钟”仅花三天完成AI模型开发,用AI防范跑道侵入事件的发生。一个AI开发平台是如何参与热带雨林保护的?华为要招聘动物语言翻译师,和公益组织一起用AI识别雨林中不和谐的声音。独家解析:为什么中国物流企业的数字化这么难?防暴力分拣、分拣路径优化、OCR单据识别、运输路径优化,AI正在改变物流行业华为云边缘智能技术新突破,多任务学xi助力城市楼宇智能升级两个园区每月节省252 MWh的电量,省了36.75%以上的能源。用AI技术推动西安民俗文化,斗鱼超管团队有一套通过图片秒速识别,显示图片背后的那些历史故事。苏州平江河:借助华为AI让治水不再难借助AI,实现7*24小时自动识别抓拍非法撒网抓鱼、漂洗衣物等污损河道行为。
  • [其他] Keras框架简介
    Keras是一个高级神经网络API,使得数据科学家和研究人员可以使用相对较少的硬件资源(如GPU)来训练复杂的深度学习 模型。它的设计目的是提高效率和性能,同时保持易用性。以下是Keras的一些主要特点:轻量级:Keras应用程序的大小相对较小,这使得它们易于使用,并且可以在不太强大的硬件上运行。灵活性:Keras提供了许多内置的层(layer)类型,这些层可以帮助您构建各种类型的神经网络,包括卷积神经网络(CNN)、循环神经网络(RNN)、长短时记忆网络、和自编码器等。可扩展性:Keras是一个高度可扩展的框架,可以轻松地添加新层和模型,而不会对现有应用程序造成太大影响。高级功能:Keras提供了许多高级功能,例如数据并行化、模型剪枝和调参等,这些功能可以帮助您优化模型的性能和准确性。与其他库集成:Keras与其他流行的Python库(如TensorFlow、Scikit-Learn和XNN models等)集成,使得它们具有更广泛的应用程序。总之,Keras是一个功能强大、易于使用、高度可扩展和与其他库集成的AI框架,广泛应用于图像处理、自然语言处理、语音识别和推荐系统等领域。
  • [其他] AI技术现状
    人工智能(AI)是近年来最受瞩目的技术领域之一。AI技术已经在各个领域得到广泛应用,从自然语言处理到图像和语音识别,从智能家居到自动驾驶等等。随着技术的不断发展,现在的AI技术已经取得了许多突破性的进展,下面将对现在最新的AI技术现状进行详细介绍。1.机器学习机器学习是AI的核心技术之一,它是一种让计算机通过数据自动学习和优化模型的方法。现在,机器学习已经广泛应用于各个领域,如图像和语音识别、自然语言处理、推荐系统等。机器学习的核心算法包括监督学习、无监督学习、强化学习等。2.深度学习深度学习是机器学习的一种高级形式,它利用多层神经网络来模拟人类神经系统的结构和功能。深度学习已经成为AI技术中最重要的技术之一,它具有处理大规模数据和高性能的优势。深度学习的核心算法包括卷积神经网络、循环神经网络、自动编码器等。3.自然语言处理自然语言处理是AI技术中最具挑战性的领域之一。自然语言处理旨在让计算机理解和处理人类语言。现在,自然语言处理已经取得了许多重要的进展,如语音识别、文本分类、情感分析等。自然语言处理的核心算法包括词向量、长短时记忆网络、统计语言模型等。4.计算机视觉计算机视觉是AI技术中另一个重要的领域。计算机视觉利用计算机和算法来解决识别和理解图像和视频的问题。现在,计算机视觉已经广泛应用于人脸识别、目标检测、图像分类等任务。计算机视觉的核心算法包括特征提取、图像描述、卷积神经网络等。5.强化学习强化学习是一种通过试错和反馈来学习最优行为的方法。强化学习已经被广泛应用于多个领域,如游戏、机器人、自动驾驶等。强化学习的核心算法包括Q-Learning、SARSA、Deep Q-Network等。总之,现在的AI技术已经取得了许多突破性的进展,在各个领域得到了广泛应用。未来,随着技术的不断发展和改进,AI技术将会继续迎来更多的创新和进步。
  • [技术干货] Python线性规划实例,用PuLP 库求解线性规划的建模与编程
    什么是线性规划线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配、生产调度和混合问题。线性规划问题的建模和求解,通常按照以下步骤进行:    问题定义,确定决策变量、目标函数和约束条件;    模型构建,由问题描述建立数学方程,并转化为标准形式的数学模型;    模型求解,用标准模型的优化算法对模型求解,得到优化结果;PuLP 库求解线性规划PuLP是一个开源的第三方工具包,可以求解线性规划、整数规划、混合整数规划问题。下面以该题为例讲解 PuLP 求解线性规划问题的步骤:    导入 PuLP库函数    定义一个规划问题    定义决策变量    添加约束条件    求解实例某厂生产甲乙两种饮料,每百箱甲饮料需用原料6千克、工人10名,获利10万元;每百箱乙饮料需用原料5千克、工人20名,获利9万元。今工厂共有原料60千克、工人150名,又由于其他条件所限甲饮料产量不超过8百箱。    问如何安排生产计划,即两种饮料各生产多少使获利最大?    若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?    若每百箱甲饮料获利可增加1万元,是否应否改变生产计划?    若每百箱甲饮料获利可增加1万元,若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?    若不允许散箱(按整百箱生产),如何安排生产计划,即两种饮料各生产多少使获利最大?     问题1建模:    决策变量:    x1:甲饮料产量(单位:百箱)    x2:乙饮料产量(单位:百箱)    目标函数:    max fx = 10*x1 + 9*x2    约束条件:    6*x1 + 5*x2 <= 60    10*x1 + 20*x2 <= 150    取值范围:    给定条件:x1, x2 >= 0,x1 <= 8    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5    因此,0 <= x1<=8,0 <= x2<=7.5    ProbLP1 = pulp.LpProblem("ProbLP1", sense=pulp.LpMaximize)    # 定义问题 1,求最大值    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2    ProbLP1 += (10*x1 + 9*x2)  # 设置目标函数 f(x)    ProbLP1 += (6*x1 + 5*x2 <= 60)  # 不等式约束    ProbLP1 += (10*x1 + 20*x2 <= 150)  # 不等式约束    ProbLP1.solve()    print(ProbLP1.name)  # 输出求解状态    print("Status:", pulp.LpStatus[ProbLP1.status])  # 输出求解状态    for v in ProbLP1.variables():        print(v.name, "=", v.varValue)  # 输出每个变量的最优值    print("F1(x)=", pulp.value(ProbLP1.objective))  # 输出最优解的目标函数值     问题2建模:    决策变量:    x1:甲饮料产量(单位:百箱)    x2:乙饮料产量(单位:百箱)    x3:增加投资(单位:万元)    目标函数:    max fx = 10*x1 + 9*x2 - x3    约束条件:    6*x1 + 5*x2 <= 60 + x3/0.8    10*x1 + 20*x2 <= 150    取值范围:    给定条件:x1, x2 >= 0,x1 <= 8    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5    因此,0 <= x1<=8,0 <= x2<=7.5    ProbLP2 = pulp.LpProblem("ProbLP2", sense=pulp.LpMaximize)    # 定义问题 2,求最大值    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2    x3 = pulp.LpVariable('x3', cat='Continuous')  # 定义 x3    ProbLP2 += (10*x1 + 9*x2 - x3)  # 设置目标函数 f(x)    ProbLP2 += (6*x1 + 5*x2 - 1.25*x3 <= 60)  # 不等式约束    ProbLP2 += (10*x1 + 20*x2 <= 150)  # 不等式约束    ProbLP2.solve()    print(ProbLP2.name)  # 输出求解状态    print("Status:", pulp.LpStatus[ProbLP2.status])  # 输出求解状态    for v in ProbLP2.variables():        print(v.name, "=", v.varValue)  # 输出每个变量的最优值    print("F2(x)=", pulp.value(ProbLP2.objective))  # 输出最优解的目标函数值     问题3建模:    决策变量:    x1:甲饮料产量(单位:百箱)    x2:乙饮料产量(单位:百箱)    目标函数:    max fx = 11*x1 + 9*x2    约束条件:    6*x1 + 5*x2 <= 60    10*x1 + 20*x2 <= 150    取值范围:    给定条件:x1, x2 >= 0,x1 <= 8    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5    因此,0 <= x1<=8,0 <= x2<=7.5    ProbLP3 = pulp.LpProblem("ProbLP3", sense=pulp.LpMaximize)  # 定义问题 3,求最大值    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2    ProbLP3 += (11 * x1 + 9 * x2)  # 设置目标函数 f(x)    ProbLP3 += (6 * x1 + 5 * x2 <= 60)  # 不等式约束    ProbLP3 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束    ProbLP3.solve()    print(ProbLP3.name)  # 输出求解状态    print("Status:", pulp.LpStatus[ProbLP3.status])  # 输出求解状态    for v in ProbLP3.variables():        print(v.name, "=", v.varValue)  # 输出每个变量的最优值    print("F3(x) =", pulp.value(ProbLP3.objective))  # 输出最优解的目标函数值     问题4建模:    决策变量:    x1:甲饮料产量(单位:百箱)    x2:乙饮料产量(单位:百箱)    x3:增加投资(单位:万元)    目标函数:    max fx = 11*x1 + 9*x2 - x3    约束条件:    6*x1 + 5*x2 <= 60 + x3/0.8    10*x1 + 20*x2 <= 150    取值范围:    给定条件:x1, x2 >= 0,x1 <= 8    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5    因此,0 <= x1<=8,0 <= x2<=7.5    ProbLP4 = pulp.LpProblem("ProbLP4", sense=pulp.LpMaximize)  # 定义问题 2,求最大值    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2    x3 = pulp.LpVariable('x3', cat='Continuous')  # 定义 x3    ProbLP4 += (11 * x1 + 9 * x2 - x3)  # 设置目标函数 f(x)    ProbLP4 += (6 * x1 + 5 * x2 - 1.25 * x3 <= 60)  # 不等式约束    ProbLP4 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束    ProbLP4.solve()    print(ProbLP4.name)  # 输出求解状态    print("Status:", pulp.LpStatus[ProbLP4.status])  # 输出求解状态    for v in ProbLP4.variables():        print(v.name, "=", v.varValue)  # 输出每个变量的最优值    print("F4(x) = ", pulp.value(ProbLP4.objective))  # 输出最优解的目标函数值     问题5建模:    决策变量:    x1:甲饮料产量,正整数(单位:百箱)    x2:乙饮料产量,正整数(单位:百箱)    目标函数:    max fx = 10*x1 + 9*x2    约束条件:    6*x1 + 5*x2 <= 60    10*x1 + 20*x2 <= 150    取值范围:    给定条件:x1, x2 >= 0,x1 <= 8,x1, x2 为整数    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5    因此,0 <= x1<=8,0 <= x2<=7说明:本题中要求饮料车辆为整百箱,即决策变量 x1,x2 为整数,因此是整数规划问题。    ProbLP5 = pulp.LpProblem("ProbLP5", sense=pulp.LpMaximize)  # 定义问题 1,求最大值    x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Integer')  # 定义 x1,变量类型:整数    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Integer')  # 定义 x2,变量类型:整数    ProbLP5 += (10 * x1 + 9 * x2)  # 设置目标函数 f(x)    ProbLP5 += (6 * x1 + 5 * x2 <= 60)  # 不等式约束    ProbLP5 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束    ProbLP5.solve()    print(ProbLP5.name)  # 输出求解状态    print("Status:", pulp.LpStatus[ProbLP5.status])  # 输出求解状态    for v in ProbLP5.variables():        print(v.name, "=", v.varValue)  # 输出每个变量的最优值    print("F5(x) =", pulp.value(ProbLP5.objective))  # 输出最优解的目标函数值————————————————版权声明:本文为CSDN博主「神仙别闹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/s1t16/article/details/127957430
  • [技术干货] Python 导入数据(Pandas)
    常见的数据文件格式有文本文件(.txt)、Excel 文件(.xls, .xlsx)和 csv 文件(.csv)。 在读取文本文件时,会遇到逗号、空格、制表符等不同的数据分割符。读取 Excel 文件时,首先 .xls 与 .xlsx 的格式不同,其次要考虑数据表带不带标题行,有时文件中还有多个工作表。读取文件时还会遇到数据缺失,非法字符。对于小白来说,特别在进行数学建模时,处理这些问题时都会心神不宁。Python 中读取数据文件的方法也很多。本文非常不推荐使用 Python 自身的文件操作如打开(open)、关闭(close)、读写(read、readline)函数,而是推荐使用 Pandas 读取数据文件。原因在于:    Pandas 提供了多种常用文件格式的读写函数,以上各种情况都能一行代码搞定。    Pandas 是基于 NumPy 构建的数据分析工具包,便于进行数据整理与清洗,操作方便灵活。    Pandas 提供了与其它各种数据结构的转换工具,使用简单灵活。    很多数学建模算法的例程就是使用 Pandas 的 Series、DataFrame 数据结构,无需进行转换。Pandas 读取 Excel 文件Pandas 使用 read_excel() 函数读取 Excel文件。pd.read_excel(io, sheetname=0,header=0,index_col=None,names=None)pd.read_excel() 的主要参数:    io : 文件路径(包括文件名)。    header :指定作为列名的行。默认为 0,即首行为标题行。设置 header=None,表示无标题行,首行就是数据行。    sheetname:指定工作表。默认为 sheetname=0。设置 sheetname=None 返回全表, 设置 sheetname=[0,1] 返回多表 。    index_col :指定作为行索引的列编号或列名。    names:指定列名, 类型为 list。pd.read_excel() 使用实例:    # sheetname 表示读取指定的工作表,header=0 表示首行为标题行,header=None 表示首行为数据行    df = pd.read_excel("data/youcans1.xls", sheetname='Sheet1', header=0)Pandas 读取 csv 文件Pandas 使用 pandas.read_csv() 函数读取 Excel文件。pd.read_csv( filepath ,sep=',', header='infer', names=None, index_col=None)pd.read_csv() 的主要参数:    filepath : 文件路径(包括文件名)。    sep:指定分隔符。默认为逗号 ',',可根据需要设置其它分隔符。    header :指定作为列名的行。如果文件没有列名则默认为 0,表示首行就是数据行;设置 header=None,表示无标题行,首行就是数据行。    index_col :指定作为行索引的列编号或列名。    names:指定列名, 类型为 list。pd.read_csv() 使用实例:    # sep=','表示间隔符为逗号,header=0表示首行为标题行,header=None 表示首行为数据行    df = pd.read_csv("data/youcans2.csv", header=0, sep=',') Pandas 读取文本文件对于文本文件 .txt 和 .dat,可以使用 pandas.read_table() 函数读取 。pd.read_table( filepath ,sep='\t', header='infer', names=None, index_col=None)pd.read_table() 的主要参数:    filepath : 文件路径(包括文件名)。    sep:指定分隔符。默认为 tab 制表符,可根据需要设置其它分隔符。    header :指定作为列名的行。如果文件没有列名则默认为 0,表示首行就是数据行;设置 header=None,表示无标题行,首行就是数据行。    index_col :指定作为行索引的列编号或列名。    names:指定列名, 类型为 list。pd.read_table() 使用实例:    # sep='\t'表示分隔符为制表符,header=None 表示无标题行,第一行是数据    df = pd.read_table("data/youcans3.dat", sep="\t", header=None)Pandas 读取其它文件格式Pandas 还提供了读取多种文件格式的函数,使用方法也都类似,都是一行代码搞定。例如:    pandas.read_sql,读取 SQL 数据库    pandas.read_html,抓取网页中的表格数据    pandas.read_json,读取 JSON 数据文件    pandas.read_clipboard,读取剪贴板内容由于这些文件格式中数模竞赛中很少用到,本文就不进行详细介绍了。有需要的同学可以根据函数名通过搜索引擎搜索参考资料,也可以查阅官方文档:https://pandas.pydata.org/pandas-docs/stable/reference/io.html此外,对于大数据类的问题,所需处理的数据量可能非常大,必要时需对文件进行拆分或合并,也可以用 pandas 进行处理。 通用数据导入方法整体例程    import pandas as pd         # 读取数据文件    def readDataFile(readPath):  # readPath: 数据文件的地址和文件名        # readPath = "../data/youcansxupt.csv"  # 文件路径也可以直接在此输入        try:            if (readPath[-4:] == ".csv"):                dfFile = pd.read_csv(readPath, header=0, sep=",")  # 间隔符为逗号,首行为标题行                # dfFile = pd.read_csv(filePath, header=None, sep=",")  # sep: 间隔符,无标题行            elif (readPath[-4:] == ".xls") or (readPath[-5:] == ".xlsx"):  # sheet_name 默认为 0                dfFile = pd.read_excel(readPath, header=0)  # 首行为标题行                # dfFile = pd.read_excel(filePath, header=None)  # 无标题行            elif (readPath[-4:] == ".dat"):  # sep: 间隔符,header:首行是否为标题行                dfFile = pd.read_table(readPath, sep=" ", header=0)  # 间隔符为空格,首行为标题行                # dfFile = pd.read_table(filePath,sep=",",header=None) # 间隔符为逗号,无标题行            else:                print("不支持的文件格式。")        except Exception as e:            print("读取数据文件失败:{}".format(str(e)))            return        return dfFile         # 主程序    def main():             # 读取数据文件 # Youcans, XUPT        readPath = "../data/toothpaste.csv"  # 数据文件的地址和文件名        dfFile = readDataFile(readPath)  # 调用读取文件子程序                print(type(dfFile))  # 查看 dfFile 数据类型        print(dfFile.shape)  # 查看 dfFile 形状(行数,列数)        print(dfFile.head())  # 显示 dfFile 前 5 行数据             return         if __name__ == '__main__':  # Youcans, XUPT        main()————————————————版权声明:本文为CSDN博主「神仙别闹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/s1t16/article/details/127976173
  • [技术干货] Python 模拟退火算法
    模拟退火算法借鉴了统计物理学的思想,是一种简单、通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用。退火是金属从熔融状态缓慢冷却、最终达到能量最低的平衡态的过程。模拟退火算法基于优化问题求解过程与金属退火过程的相似性,以优化目标为能量函数,以解空间为状态空间,以随机扰动模拟粒子的热运动来求解优化问题。模拟退火算法结构简单,由温度更新函数、状态产生函数、状态接受函数和内循环、外循环终止准则构成。    温度更新函数是指退火温度缓慢降低的实现方案,也称冷却进度表;    状态产生函数是指由当前解随机产生新的候选解的方法;    状态接受函数是指接受候选解的机制,通常采用Metropolis准则;    外循环是由冷却进度表控制的温度循环;    内循环是在每一温度下循环迭代产生新解的次数,也称Markov链长度。模拟退火算法的基本流程如下:        初始化:初始温度T,初始解状态s,迭代次数L;        对每个温度状态,重复 L次循环产生和概率性接受新解:        通过变换操作由当前解s 产生新解s′;        计算能量差 ∆E,即新解的目标函数与原有解的目标函数的差;        若∆E <0则接受s′作为新的当前解,否则以概率exp(-∆E/T) 接受s′ 作为新的当前解;        在每个温度状态完成 L次内循环后,降低温度 T,直到达到终止温度。多变量函数优化问题选取经典的函数优化问题和组合优化问题作为测试案例。    问题 1:Schwefel 测试函数,是复杂的多峰函数,具有大量局部极值区域。    F(x)=418.9829*n-\Sigma \left ( i=1,n \right )\left [ xi*sin(\vee \left ( \left | xi \right | \right ))) \right ]本文取 d=10, x=[-500,500],函数在 X=(420.9687,...420.9687)处为全局最小值 f(X)=0.0。使用模拟退火算法的基本方案:控制温度按照 T(k) = a * T(k-1) 指数衰减,衰减系数取 a;如式(1)按照 Metropolis 准则接受新解。对于问题 1(Schwefel函数),通过对当前解的一个自变量施加正态分布的随机扰动产生新解。 部分模拟退火算法 Python 程序    # 模拟退火算法 程序:多变量连续函数优化    # Program: SimulatedAnnealing_v1.py    # Purpose: Simulated annealing algorithm for function optimization    # v1.0:    #   (1) 基本算法:单变量连续函数优化问题    #   (2) 文件输出优化结果和中间过程数据    #   (3) 设置指标参数计数器    #   (4) 图形输出坏解接受概率         #  -*- coding: utf-8 -*-    import math                         # 导入模块    import random                       # 导入模块    import pandas as pd                 # 导入模块 YouCans, XUPT    import numpy as np                  # 导入模块 numpy, 并简写成 np    import matplotlib.pyplot as plt     # 导入模块 matplotlib.pyplot, 并简写成 plt    from datetime import datetime              # 子程序:定义优化问题的目标函数    def cal_Energy(X, nVar):        # 测试函数 1:Schwefel 测试函数        # -500 <= Xi <= 500        # 全局极值:(420.9687,420.9687,...),f(x)=0.0        sum = 0.0        for i in range(nVar):            sum += X[i] * np.sin(np.sqrt(abs(X[i])))        fx = 418.9829 * nVar - sum        return fx              # 子程序:模拟退火算法的参数设置    def ParameterSetting():        cName = "funcOpt"           # 定义问题名称        nVar = 2                    # 给定自变量数量,y=f(x1,..xn)        xMin = [-500, -500]         # 给定搜索空间的下限,x1_min,..xn_min        xMax = [500, 500]           # 给定搜索空间的上限,x1_max,..xn_max             tInitial = 100.0            # 设定初始退火温度(initial temperature)        tFinal  = 1                 # 设定终止退火温度(stop temperature)        alfa    = 0.98              # 设定降温参数,T(k)=alfa*T(k-1)        meanMarkov = 100            # Markov链长度,也即内循环运行次数        scale   = 0.5               # 定义搜索步长,可以设为固定值或逐渐缩小        return cName, nVar, xMin, xMax, tInitial, tFinal, alfa, meanMarkov, scale              # 模拟退火算法    def OptimizationSSA(nVar,xMin,xMax,tInitial,tFinal,alfa,meanMarkov,scale):    ……🚩 完整代码 https://download.csdn.net/download/s1t16/86951372————————————————版权声明:本文为CSDN博主「神仙别闹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/s1t16/article/details/127801083
  • [技术干货] 基于Python实现LSTM对股票走势的预测
    摘要为对股票价格的涨跌幅度进行预测,本文使用了基于长短期记忆网络(LSTM)的方法。根据股票涨跌幅问题, 通过对股票信息作多值量化分类,将股票预测转化成一个多维函数拟合问题。将股票的历史基本交易信息作为特征输入,利用神经网络对其训练,最后对股票的涨跌幅度做分类预测。数据集为代号 510050 的上证股票,实验结果表明该模型在单纯预测涨跌的情况下有比较好的预测效果。一、问题描述1.1绪论随着我国经济的快速发展,政府、投资机构以及投资者们对股票预测的需求也越来越多。因此, 对股票价格走势的分析成为越来越多研究者关注的课题。但股票价格高度的波动性与不确定性,使其成 为计算机领域和金融领域的一大难题。由于股票本身的波动性和不确定性,其价格是否可以被预测这一议题一直存在着不少争议。在 1956 年,Fama 提出了“有效市场假说”,指出股票的价格可以立即充分地反映市场上所有的已知信息,以及那些尚未发生但市场预期会发生的事件对股票价格的影响。这一假说为之后的股票预测工作提供了依据。股票投资通常会选择某一类或某一只股票来作为投资对象,对这一类或一只股票进行预测,既可以将整体的股票交易信息作为训练数据,也可以只选择该类或该只股票的交易信息作为训练数据。模型有决策树、LR、支持向量机等传统机器学习的方法,也有深度学习的方法。一种最常见的股票预测方法是自回归模型,然而此类模型通常用于处理线性的稳定数据,用于处理股价存在着一定的局限性。因此也有人使用非线性模型如支持向量机、马尔可夫模型等,用以处理股票的非线性特征。考虑到股票数据的时序性,本文选择用对时序序列有较好性能的 LSTM 网络分别对其训练,将训练好的模型用于预测次日收盘价的涨跌幅, 并对结果做对比分析。1.2当前股票预测的方法概述基于决策树的逐步回归算法。逐步回归算法是目前被广泛应用的一种回归算法。逐步回归算法的基本思想是:逐个引入自变量,每次引入的自变量对因变量 Y 影响最显著。每引入一个新自变量,都要对之前引入到回归方程中的旧自变量进行逐个检验,将当前方程中不显著的自 变量,从对因变量 Y 影响最小的自变量开始,进行逐个剔除,直到不能再引入新的 自变量为止。最终在回归方程中保留的自变量对因变量 Y 都是显著影响的,而不在 回归方程中的自变量对 Y 的作用都是不显著的,这样的回归方程称为最优回归方程。SVM 方法,参考目前论文中出现频率最高的 SVM、BP 神经网 络和小波神经网络股票预测模型,分别构建了 3 个 6 输 入、1 输出的股票预测模型。输入分别为:某日上证 指数的开盘指数(价)、指数(股价)最高值、指数(股价) 最低值、收盘指数(价)、交易量和交易额;输出为输入次日的收盘指数(价)。线性回归算法,在 CTR 预估问题的发展初期,使用最多的方法就是逻辑回归(LR),LR 使用了 Sigmoid 变换将函数值映射到 0~1 区间,映射后的函数值就是 CTR 的预估值。LR 属于线性模型,容易并行化,可以轻松处理上亿条数据,但是学习能力十分有限,需要大量的特征工程来增加模型的学习能力。但大量的特征工程耗时耗力同时并不一定会带来效果提升。因此,如何自动发现有效的特征、特征组合,弥补人工经验不足,缩短 LR 特征实验周期,是亟需解决的问题。深度学习算法。通过多种不同的向量表示学习方法,从不同角度抽取特征,并利用多路循环神经网络对每种特征进行单独处理,充分利用所获取的数据信息,最后再将特征进行拼接,共同对股票价格进行预测。神经网络分为多种,BP 神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,也是目前应用最广泛的神经网络;卷积神经网络(CNN)则是通过构造卷积层来提取输入特征,再利用前馈连接来完成特征的输出,它是深度学习的代表算法之一;循环神经网络(RNN)适用于输入是序列的数据,它是一种在序列的演进方向进行递归,循环单元按照链式连接的一种神经网络。1.3本文所使用的模型长短期记忆网络(LSTM)则是对 RNN 的一种改进,它通过引入门机制构建特殊的记忆神经单元,从而解决不能实现信息的长期依赖问题。LSTM 结构如图 1 所示,其包括输入门、输出门、遗忘门等门结构,这些门结构通过以下的递归方程来更新细胞状态,同时激活从输入到输出的映射。图 1.3.1 LSTM 单元结构本文主要针对预测股票涨跌幅度的目标,将其转换为一个多分类任务来进行处理。 影响股票涨跌的因素有很多,与股票本身信息相关的有其基本交易数据如开盘价、收盘价、最高价、最低价、交易量、涨跌幅等,还有交易数据衍生出的一些统计技术指标,如换手率等。 除了交易数据,股市波动还通常和舆论、政策等因素相关。但这些特征信息不能直观、即时的反映到后续的股票价格中去,同时这些信息是否与股票的基本信息耦合也尚未论证。因此本文只对股票的此类基本交易数据作为输入特征。具体细节将在第三部分阐述。二、数据集说明2.1tushare 库和 Talib 库概要Tushare 是一个免费、开源的 python 财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到 Python pandas 包在金融量化分析中体现出的优势,Tushare 返回的绝大部分的数据格式都是 pandas DataFrame 类型,非常便于用 pandas/NumPy/Matplotlib进行数据分析和可视化。TA-Lib 是一个多平台的市场分析工具,被需要对金融市场数据进行技术分析的交易软件开发人员广泛使用。它包含了 200 个指标的计算函数,如 ADX, MACD, RSI,随机指数,布林格带等。TA-Lib 为 C/ C++,Java, Perl, Python 和.NET 提供了开源的 API。TA-Lib 是在 BSD 许可下提供的,允许集成到开发者自己的开源或商业应用程序中。TA-Lib 也可以作为一个易于安装的 Excel 插件免费试用。2.2获取历史行情数据利用 tushare 包可以获取个股历史交易数据(包括均线数据),可以通过参数设置获取日 k 线、周 k 线、月 k 线,以及 5 分钟、15 分钟、30 分钟和 60 分钟 k 线数据。参数说明:    code:股票代码,即 6 位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深 300 指数 sz50=上证 50 zxb=中小板 cyb=创业板)    start:开始日期,格式 YYYY-MM-DD    end:结束日期,格式 YYYY-MM-DD    ktype:数据类型,D=日 k 线 W=周 M=月 5=5 分钟 15=15 分钟 30=30 分钟 60=60 分钟,默认为 D返回值说明    date:日期    open:开盘价    high:最高价    close:收盘价    low:最低价    volume:成交量    price_change:价格变动    p_change:涨跌幅    ma5:5 日均价    ma10:10 日均价    ma20:20 日均价    v_ma5:5 日均量    v_ma10:10 日均量    v_ma20:20 日均量    turnover:换手率[注:指数无此项]在本次实验中,使用了开盘价,最高价,收盘价,最低价,成交量,价格变动,涨跌幅进行预测。2.3实现代码:    设置查询股票代码,查询时间code='510050'date1='2000-12-01'date2='2021-01-07'filename='..\\data\\'length=-1    1    2    3    4    5    调用库进行查询df = ts.get_hist_data(code, start=date1, end=date2)df1 = pd.DataFrame(df)    1    2下面查看获得的数据如下:图 2.3.1 获取历史行情数据情况    使用 Talib 库根据现有数据计算相应的行情指标data['slowk'], data['slowd'] = \talib.STOCH(df['high'].values, df['low'].values, df['close'].values,fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)data["BBANDS_upper"],data["BBANDS_middle"],data["BBANDS_lower"] =talib.BBANDS(df['close'].values, matype=talib.MA_Type.T3)data["MACD"],data['MACDsignal'],data['MACDhist'] =talib.MACD(df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)data["ATR"] = talib.ATR(df['high'].values,df['low'].values, df['close'].values, timeperiod=14)data["AD"] = talib.AD(df['high'].values,df['low'].values, df['close'].values, df['vol'].values)    1    2    3    4    5    6    7    8    9    10    最后,将得到的数据保存成 CSV 格式供进一步挖掘信息。df1 = df1[['close','open', 'high', 'low', 'volume', 'price_change','p_change']]df1 = df1.sort_values(by='date')print('共有%s 天数据' % len(df1))if length == -1: path = code + '.csv df1.to_csv(os.path.join(filename, path))else: if len(df1) >= length: path = code + '.csv' df1.to_csv(os.path.join(filename, path))    1    2    3    4    5    6    7    8    9    102.4数据预处理获得了以上的原生数据后,为了进行训练,还需要对原始数据进行数据预处理。为了方便训练,还是将数据分为训练集和测试集。但是需要注意的是,测试集并不是单纯用来测试,同样也可以用来训练 LSTM 模型,将数据分类的目的只是为了加速训练而已。    数据的归一化在多指标评价体系中,由于个评价指标的性质,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱值水平低指标的作用,因此,为了保证结果的可靠性,需要对原始数据进行标准化处理。经验上来说,归一化就是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。本次实验使用 Min-Max 归一化,Min-Max 标准化是指对原始数据进行线性变换,将值映射到[0,1]之间。归一化的表达式如下:    训练集-测试集的分割本次实验按照时间序列,在进行中短期股票预测时将最近的百分之二的数据作为测试数据,其余的数据作为训练数据。在进行中长期股票预测时将最近的百分之十的数据作为测试数据,其余的数据作为训练数据。2.5设计代码stock_data = read_csv(corpusFile)close_max = stock_data['close'].max() #收盘价的最大值close_min = stock_data['close'].min() #收盘价的最小值df = stock_data.apply(lambda x: (x - min(x)) / (max(x) - min(x)))# min-max 标准化#根据前 n 天的数据,预测未来一天的收盘价(close), 例如:根据 1 月 1 日、1 月 2日、1 月 3 日、1 月 4 日、1 月 5 日的数据(每一天的数据包含 8 个特征),预测 1 月 6 日的收盘价。sequence = sequence_lengthX = []Y = []for i in range(df.shape[0] - sequence): X.append(np.array(df.iloc[i:(i + sequence), ].values,dtype=np.float32)) Y.append(np.array(df.iloc[(i + sequence), 0],dtype=np.float32))# 构建 batchtotal_len = len(Y)trainx, trainy = X[:int(0.9 * total_len)], Y[:int(0.9 * total_len)]testx, testy = X[int(0.9 * total_len):], Y[int(0.9 * total_len):]train_loader = DataLoader(dataset=Mydataset(trainx, trainy,transform=transforms.ToTensor()), batch_size=batchSize, shuffle=True)test_loader = DataLoader(dataset=Mydataset(testx, testy),batch_size=batchSize, shuffle=True)    1    2    3    4    5    6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24    252.6股票预测使用数据说明图 2.6.1 股票数据说明如上图所示,本次实验主要考察 7 个指标,即:开盘价,最高价,收盘价,最低价,成交量,价格变动,涨跌幅。可以看到,对于以上的数据,量级上的差距非常大,因此需要使用 Min-Max 标准化进行预处理才能进行进一步的实验。下面对每一个特征进行分析:    开盘价。开盘价又称开市价,是指某种证券在证券交易所每个交易日开市后的第一笔每股买卖成交价格。世界上大多数证券交易所都采用成交额最大原则来确定开盘价。开盘价是一天起点,每一根 K 线的组成,是有开盘价、最高价、最低价和收盘价四个数据形成的在一般的情况下,开盘价没有太多的内涵,它只是昨天线的价格延续的一种反应。如果开盘价出现了非正常的现象,它就透露了一些重要的信息。    收盘价。收盘价指股市收盘价,为当日该证券最后一笔交易前一分钟所有交易的成交量加权平均价(含最后一笔交易)。当日无成交的,以前收盘价为当日收盘价。事实上,收盘价是市场参与者们所共同认可的价格,是一天中大家所接受的价格。而最高价是大多数人认为好的卖出价格,最低价是大多数人认为好的买进价格,而收盘价是不再进行交易的价格。因此研判收盘价有着重要意义,无论当天股价如何振荡,最终将定格在收盘价上。    最高价和最低价。指某种证券在每个交易日从开市到收市的交易过程中所产生的最高价格。如果当日该种证券成交价格没有发生变化,最高价就是即时价;若当日该种证券停牌,则最高价就是前收市价。最高价有时是一笔但有时会有几笔。最低价指某种证券在每个交易日从开市到收市的交易过程中所产生的最低价格。如果当日该种证券成交价格没有发生变化,最低价就是即时价;若当日该种证券停牌,则最低价就是前收市价。股票的最高价和最低价是交易当天所能达到的最高值或最低值,单从最高价和最低价是无法做出趋势判断的,最基本的方法是依据线图才有意义。    成交量。成交量是指在某一时段内具体的交易数。它可以在分时图中绘制,包括日线图、周线图、月线图甚至是 5 分钟、30 分钟、60 分钟图中绘制。市场成交量的变化反映了资金进出市场的情况,成交量是判断市场走势的重要指标。股票长期成交量减少,就是股票走势开始低迷的信号,如果在大盘缩量的状态下出现的话,这个信号就越强。股票上涨可以通过大的成交量或成交量逐渐放大来确认其走势;股票成交量情况是股票对大众的吸引程度真实反应,当大众看好某个股票时,股票就会有很多人买入,持有该股票的人会持股待涨,从而推动股票价格的上涨;同理,如果大众对该股票不看好,持股的人会卖出,空仓的人不会买入,从而导致股票价格的下跌。所以说成交量是股票价格的主宰。    价格变动。股票市场价格波动是股市运行的基础,也是股票投资者关注的焦点。股价的波动受各种经济因素和非经济因素的影响,分析这些因素的影响,可为投资者作出正确的投资决策提供一定的依据。本文结合我国股市波动的实例,从各种因素对股价影响的传导机制入手,着重对影响我国股票市场价格波动的基本因素作一般性考察。    涨跌幅。涨跌幅是对涨跌值的描述,用 % 表示,涨跌幅=涨跌值/昨收盘*100%。 当前交易日最新成交价(或收盘价)与前一交易日收盘价相比较所产生的数值,这个数值一般用百分比表示。在中国股市对涨跌停作出限制,因此有“涨跌停板”的说法。涨跌幅排行榜是市场热点的集中表现,根据涨跌幅排行榜.可以迅速准确地把握短时间内上涨最快风险又最小的股票,并从中判断买人和卖出的时机。根据涨跌幅排行榜既可以炒作一般短线,也可以炒作超级短线。获得以上特征后,使用数据继续获得行情指标如下:    随机指标 KD:用目前股价在近阶段股价分布中的相对位置来预测可能发生的趋势反转。用法:1.D>80,超买;D<20,超卖;2.线 K 向上突破线 D,买进信号;线向下跌破线 D,卖出信号;3.线 K 与线 D 的交叉发生在 70 以上,30 以下,才有效;4.KD 指标不适于发行量小,交易不活跃的股票;5.KD 指标对大盘和热门大盘股有极高准确性。    布林线指标 BBANDS:1.股价上升穿越布林线上限时,回档机率大;2.股价下跌穿越布林线下限时,反弹机率大;3.布林线震动波带变窄时,表示变盘在即;4.BOLL须配合 BB 、WIDTH 使用。    平滑异同移动平均线 MACD:移动平滑异同平均线(Moving Average Convergence Divergence,简称 MACD 指标)策略。MACD 是查拉尔·阿佩尔(Geral Appel)于 1979年提出的,由一快及一慢指数移动平均(EMA)之间的差计算出来。“快”指短时期的 EMA,而“慢”则指长时期的 EMA,最常用的是 12 及 26 日 EMA。MACD 指标是运用快速(短期)和慢速(长期)移动平均线及其聚合与分离的征兆,加以双重平滑运算,是一种趋向类指标。根据移动平均线原理发展出来的MACD,一则去除了移动平均线频繁发出假信号的缺陷,二则保留了移动平均线的效果,因此,MACD 指标具有均线趋势性、稳重性、安定性等特点,是用来研判买卖股票的时机,预测股票价格涨跌的技术分析指标 。    DIF 线:收盘价短期、长期指数平滑移动平均线间的差;DEA 线:DIF 线的 M 日指数平滑移动平均线;MACD 线:DIF 线与 DEA 线的差,彩色柱状线;参数:SHORT(短期)、LONG(长期)、M 天数,一般为 12、26、9。用法:1.DIF、DEA 均为正,DIFF向上突破 DEA,买入信号;2.DIF、DEA 均为负,DIFF 向下跌破 DEA,卖出信号;DEA 线与 K 线发生背离,行情反转信号;4.分析 MACD 柱状线,由红变绿(正变负),卖出信号;由绿变红,买入信号。    真实波动幅度均值 ATR:今日振幅、今日最高与昨收差价、今日最低与昨收差价中的最大值,为真实波幅,求真实波幅的 N 日移动平均。参数:N 为天数,一般取 14。    量价指标 AD:Chaikin A/D Line 累积/派发线(Accumulation/Distribution Line),是 Marc Chaikin 提出的一种平衡交易量指标,以当日的收盘价位来估算成交流量,用于估定一段时间内该证券累积的资金流量。    计算公式:A/D =昨日 A/D + 多空对比*今日成交量;    多空对比= [(收盘价-最低价)-(最高价-收盘价)] /(最高价-最低价)    若最高价等于最低价:多空对比=(收盘价/昨收盘)-12.7特征工程处理    主成分分析方法(PCA)神经网络在大部分时候可以节省人工构建特征的时间,但它并不是万能的,仍然依赖于一个基础的特征库。此外,虽然复杂的神经网络在理论上能逼近任何连续函数,但好的特征能够有效减少模型的复杂度。PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA 的主要思想是将 n 维特征映射到 k 维上,这 k 维是全新的正交特征也被称为主成分,是在原有 n 维特征的基础上重新构造出来的 k 维特征。PCA 的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第 1,2 个轴正交的平面中方差最大的。依次类推,可以得到 n 个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面 k 个坐标轴中,后面的坐标轴所含的方差几乎为 0。于是,我们可以忽略余下的坐标轴,只保留前面 k 个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为 0 的特征维度,实现对数据特征的降维处理。在本项目中,由于使用了开盘价、最高价、收盘价、最低价、成交量、价格变动、涨跌幅、KD、MACD 等指标,最终预测收盘价数值,各个指标相互影响,存在错综复杂的相关关系,因此使用 PCA 主成分分析方法降维是很好的特征工程方法。选取出与收盘价相关性最高的几个指标成分后,再将其输入 LSTM 神经网络训练,可以大大提高神经网络的训练效率和拟合准确度。import numpy as npclass PCA:def __init__(self,X):self.X=Xdef SVDdecompose(self):B=np.linalg.svd(self.X,full_matrices=False)self.T=B[0]*B[1]self.P=B[2].Tlamda=B[1]cm=[lamda[i]/lamda[i+1] for i in range(len(lamda)-1)]return cmdef PCAdecompose(self,k):T=self.T[:,0:k]P=self.P[:,:k]return T,P    1    2    3    4    5    6    7    8    9    10    11    12    13    14    15图 2.7.1 主成分分析方法2.8输出数据说明在本次实验中,重点关注的是预测涨跌,但是在模型中将直接预测股票的涨跌数值,这个数值仅仅作为参考,实际上没有支持其合理性的依据。这么做可以提高模型包含的信息量,一定程度上能够提高准确率。三、LSTM 模型3.1LSTM 模型概要长短期记忆网络(Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的循环神经网络存在的长期依赖问题而专门设计出来的,随着距离的增加,RNN 无法有效的利用历史信息。LSTM 没有这个问题。LSTM 模型如图 1.3.1 所示,所有循环神经网络都具有神经网络的重复模块链的形式。在标准的 RNN 中,该重复模块将具有非常简单的结构,例如单个 tanh 层。LSTM 也拥有这种链状结构,但是重复模块则拥有不同的结构。与神经网络的简单的一层相比,LSTM 拥有四层,这四层以特殊的方式进行交互。与 RTRL,BPTT,递归级联相关性相比,LSTM 在处理长期反馈更加出色,学得更快。LSTM还解决了从未有过的复杂的人工长时间延迟任务。图 3.1.1 LSTM 内部结构模型LSTM 内部主要有三个阶段:    忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。具体来说是通过计算得到的z^f在来作为忘记门控,来控制上一个状态中哪些需要留哪些需要忘。    选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入 xt进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的z表示。而选择的门控信号则是由zi来进行控制。将上面两步得到的结果相加,即可得到传输给下一个状态的c^t 。    输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 来进行控制的。并且还对上一阶段得到的c^0进行了放缩。3.2股票预测模型特征分析    模式识别使用特征来区分不同的种类,因此,特征提取是一个模式识别系统的关键部分。特征提取的目标是找到某种变换,将 n 维或 n×n 维的模式类别空间转换到维数更小的特征空间,并同时保留识别所需要的大部分信息。通过特征提取,模式分类可以在维数低得多的空间上进行,从而降低了计算的复杂度。而且,对给定的训练样本进行特征提取可以获得更精确的分类函数的描述,以构造更可靠的分类规则。    模式特征对于分类是十分重要的,股票走势的预测的关键在于能否找出有效的特征,选取的特征是否具有可辨性、可靠性、独立性和特征数量少。具体来说,特征的可辨性是指属于不同类别的样本,特征应该有相对差别较大的值,这样不同类别的样本才能区分的开;特征的可靠性是指对与属于同一类别的样本,而其应具有稳定性,这样同一类别的样本才可以判别为同一类别而不至于误判;特征的独立性是指选择出来的不同特征之间应该互不相关,这样才能减少信息的冗余性;特征的数量要少是指特征量越少越容易满足前面的三个原则,处理速度也会相应提高。    在本次实验中,采用的特征已经在第二节中详细阐述,具体请参见 2.6 节。3.3本文所使用的 LSTM 结构基于以上分析,本次实验进行如下的 LSTM 设计:    参数设计    训练轮数:100 轮;    LSTM 层数:2 层;    输入特征的维度:7;    隐藏层的维度:32;    学习率:0.001;    sequence 长度:5;即用前五天的数据来预测下一天的收盘价。    batch size:64    结构设计    LSTM 是一个 RNN 结构,并不需要分层进行设计,将上述参数引进到一个 LSTM 结构中即可。    对于输入特征大于一个的组合,该模型的参数设置与单特征输入的涨跌预测模型略有不同。该模型的 LSTM 隐藏层展开为 30 个节点,Dense 输出层同样输出的是二维向量,并通过 softmax 函数对输出向量进行处理。采取的循环次数为 300 次,不采用小样本训练,采用 Adam 算法作为优化器,学习率为 0.0005,学习率衰减系数为 1×106,采用系数为I=0.003 的正则项。此外为稳定模型的训练,初始化权重参数为 1×108,初始化偏置参数为 0,不采用随机打散的处理方式。3.4本次实验所采用的结构图图 3.4.1 实验结构图四、实验流程和结果4.1数据获取使用 tushare 获得华夏上证股票的 609 条数据,获取过程见 2.5,2.6 节。4.2Pytorch 工具集概要PyTorch 是一个基于 Torch 的 Python 开源机器学习库,用于自然语言处理等应用程序。它主要由 Facebook 的人工智能小组开发,不仅能够 实现强大的 GPU 加速,同时还支持动态神经网络,这一点是现在很多主流框架如 TensorFlow 都不支持的。 PyTorch 提供了两个高级功能:    具有强大的 GPU 加速的张量计算(如 Numpy)    包含自动求导系统的深度神经网络 除了 Facebook 之外,Twitter、GMU 和 Salesforce等机构都采用了 PyTorch。4.3Pytorch 指令解析本次实验用 Pytorch 搭建神经网络,主要使用了下列指令:class torch.nn.LSTM(*args,**kwargs)。Pytorch 里的 LSTM 单元接受的输入都必须是 3 维的张量(Tensors).每一维代表的意思不能弄错。第一维体现的是序列(sequence)结构,也就是序列的个数,用文章来说,就是每个句子的长度,因为是喂给网络模型,一般都设定为确定的长度,也就是我们喂给 LSTM 神经元的每个句子的长度,当然,如果是其他的带有带有序列形式的数据,则表示一个明确分割单位长度,例如是如果是股票数据内,这表示特定时间单位内,有多少条数据。这个参数也就是明确这个层中有多少个确定的单元来处理输入的数据。第二维度体现的是 batch_size,也就是一次性喂给网络多少条句子,或者股票数据中的,一次性喂给模型多少是个时间单位的数据,具体到每个时刻,也就是一次性喂给特定时刻处理的单元的单词数或者该时刻应该喂给的股票数据的条数。第三位体现的是输入的元素(elements of input),也就是,每个具体的单词用多少维向量来表示,或者股票数据中 每一个具体的时刻的采集多少具体的值,比如最低价,最高价,均价,5 日均价,10 均价,等等。本实验中,使用的损失函数是 MSE,即均方损失函数,在 Pytorch 进行如下的设计:loss_fn = torch.nn.MSELoss(reduce=True, size_average=True)    1    reduce = False,返回向量形式的 loss    reduce = True, 返回标量形式的 loss    size_average = True,返回 loss.mean();    如果 size_average = False,返回 loss.sum()默认情况下:两个参数都为 True.本实验的梯度选择的是 adam 梯度下降方法,在 Pytorch 进行如下的设计:optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)    1torch.optim 是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼的优化算法也将整合进来。 为了使用 torch.optim,需先构造一个优化器对象 Optimizer,用来保存当前的状态,并能够根据计算得到的梯度来更新参数。此处选择 adam 优化器即可。4.4搭建 LSTM 预测模型使用第三部分介绍的 LSTM,基于 pytorch 库,建立相应神经网络。def __init__(self, input_size=8, hidden_size=32, num_layers=1 , output_size=1 ,dropout=0, batch_first=True): super(lstm, self).__init__() # lstm 的输入 #batch,seq_len, input_size self.hidden_size = hidden_size self.input_size = input_size self.num_layers = num_layers self.output_size = output_size self.dropout = dropout self.batch_first = batch_first self.rnn=nn.LSTM(input_size=self.input_size, hidden_size=self.hidden_size,num_layers=self.num_layers, batch_first=self.batch_first, dropout=self.dropout ) self.linear = nn.Linear(self.hidden_size, self.output_size)    1    2    3    4    5    6    7    8    9    10    11    12    134.5拟合结果评估方法概要本文主要通过两指标:即,accuracy 和 loss 来对拟合结果进行评估。    accuracy:Accuracy(准确率)是机器学习中最简单的一种评价模型好坏的指标,在本次实验中,只关注预测涨跌的准确性,而对具体涨幅/跌幅不做处理。    loss:本文的 loss 使用了均方误差进行评估,均方误差是预测的常用损失函数。本次实验进行 100 轮神经网络训练,得到部分结果如图 4.5.1,可以看到,经过两轮训练,loss 达到了一个比较好的水平。图 4.5.1 训练集输出结果4.5.2 损失函数图同时给出对训练集的预测结果和实际结果得到对比图如下,此时达到了 0.9 的准确率,可以看到,模型拟合较好,其中,纵坐标是当天收盘价相对于历史最低价的涨幅。与收盘价对应,图像的涨跌与股价涨跌一一对应。图 4.5.2 训练集预测结果之后在给出的测试集上进行测试,对未来 14 天的走势进行预测,得到测试结果如下图,测试准确率达到了 0.55,每次价格小规模波动都会造成神经网络的较大的振动,因此在中短期预测上,神经网络表现仍然有待提高。图 4.5.3 中短期测试数据表现14天属于中短期预测,下面尝试进行长期预测,观察预测结果。如下图所示,对未来两个月股票走势进行预测,对涨跌的准确率达到了 0.6 对长期股市预测也有一定的参考价值。特别是最近 15 天,准确率达到了 12/15,已经非常可观。图 4.5.4 长期测试数据表现综合整个神经网络的性能可以看到,在中长期预测上,神经网络具有比较好的表现,原因从图 4.5.4 中可以看出,每次当实际数据变动和预测的走向相差较远时,神经网络的输出会出现较大的波动,这将导致神经网络越来越逼近现实数据,因此在长期预测上,本模型可以为决策者提供有力的参考价值。4.6项目附件说明本次实验项目文件有以下文件夹:stockPredict 文件夹。    根目录下存放使用的 python 代码。    data 文件夹下存放获取到的股票数据。    model 文件夹中包含已经训练好的模型。    img 文件夹中包含测试数据表现折线图和实验结构图。4.7项目使用说明书本次实验项目使用方法对用户十分友好,只需要作如下操作:    在 parser_my 中修改需要的参数,如数据源文件,LSTM 参数等。    train 文件用于训练。模型会自动保存。    test 文件用于测试,结果会自动保存。    draw 文件用于获取准确率和画出走势图,提供使用者比对。♻️ 资源在这里插入图片描述大小: 1.63MB➡️ 资源下载:https://download.csdn.net/download/s1t16/87354525————————————————版权声明:本文为CSDN博主「神仙别闹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/s1t16/article/details/128898122
  • [技术干货] 共识算法解读-PoW算法之GHOST
    背景分布式系统集群设计中面临着一个不可回避的问题,一致性问题对于系统中的多个服务节点,给定一系列操作,如何试图使全局对局部处理结果达成某种程度的一致?这个一致性问题大致有如下的场景:节点之间通讯不可靠的,延迟和阻塞节点的处理可能是错误的,甚至节点自身随时可能宕机节点作恶举例说明,就比如有两家电影院同时售卖总量一定的电影票,在这样的场景下,要如何设计方式来保证两家电影院协调同步不出现超卖或者错卖的问题呢?共识算法,就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程比如上述的买票问题,就可以有如下的设计:1.每次卖票打电话给其他电影院,确认当前票数2.协商售卖时间,比如一三五A卖,二四六B卖3.成立个第三方存票机构,它统一发票通过以上的设计,可以看出一个很重要的解决一致性算法的解决思路,即:将可能引发不一致的并行操作进行串行化,就是现在计算机系统里处理分布式一致性问题基础思路和唯一秘诀
  • [技术干货] 过拟合
    一、什么是过拟合?总的来说,机器学习模型在一批数据上过于纠结误差值,想要将误差降到最低。然而当此模型运用到现实数据或者说测试数据上,误差值变高,泛化能力差,不能表达除训练数据以外的其他数据,这就叫做过拟合。如图所示的红线。二、解决方法方法一: 增加数据量, 大部分过拟合产生的原因是因为数据量太少了. 如果我们有成千上万的数据, 红线也会慢慢被拉直, 变得没那么扭曲。方法二: 运用正规化. L1, l2 regularization等等, 这些方法适用于大多数的机器学习, 包括神经网络. 他们的做法大同小异, 我们简化机器学习的关键公式为 y=Wx . W为机器需要学习到的各种参数. 在过拟合中, W 的值往往变化得特别大或特别小. 为了不让W变化太大, 我们在计算误差上做些手脚. 原始的 cost 误差是这样计算, cost = 预测值-真实值的平方. 如果 W 变得太大, 我们就让 cost 也跟着变大, 变成一种惩罚机制. 所以我们把 W 自己考虑进来. 这里 abs 是绝对值. 这一种形式的 正规化, 叫做 l1 正规化. L2 正规化和 l1 类似, 只是绝对值换成了平方. 其他的l3, l4 也都是换成了立方和4次方等等. 形式类似. 用这些方法,我们就能保证让学出来的线条不会过于扭曲.还有一种专门用在神经网络的正规化的方法, 叫作 dropout. 在训练的时候, 我们随机忽略掉一些神经元和神经联结 , 是这个神经网络变得”不完整”. 用一个不完整的神经网络训练一次.到第二次再随机忽略另一些, 变成另一个不完整的神经网络. 有了这些随机 drop 掉的规则, 我们可以想象其实每次训练的时候, 我们都让每一次预测结果都不会依赖于其中某部分特定的神经元. 像l1, l2正规化一样, 过度依赖的 W , 也就是训练参数的数值会很大, l1, l2会惩罚这些大的 参数. Dropout 的做法是从根本上让神经网络没机会过度依赖.三、代码案例1.导入相关包    import torch    import torch.nn as nn    import matplotlib.pyplot as plt2.数据集及其可视化    torch.manual_seed(1)         N_SAMPLES=20    N_HIDDEN=300         x=torch.unsqueeze(torch.linspace(-1,1,N_SAMPLES),1)#x按列随机在-1到1之间生成20个数据    y=x+0.3*torch.normal(torch.zeros(N_SAMPLES,1),torch.ones(N_SAMPLES,1))#加上符合正态分布的噪声点         test_x=torch.unsqueeze(torch.linspace(-1,1,N_SAMPLES),1)    test_y=test_x+0.3*torch.normal(torch.zeros(N_SAMPLES,1),torch.ones(N_SAMPLES,1))         plt.scatter(x.data.numpy(),y.data.numpy(),c='magenta',s=50,alpha=0.5,label='train')    plt.scatter(test_x.data.numpy(),test_y.data.numpy(),c='cyan',s=50,alpha=0.5,label='test')    plt.legend(loc='upper left')#label放置在左上角    plt.show() 数据集分布情况: 3.网络搭建    #采用pytorch快速搭建法    net_overfitting=torch.nn.Sequential(        torch.nn.Linear(1,N_HIDDEN),        torch.nn.ReLU(),        torch.nn.Linear(N_HIDDEN,N_HIDDEN),        torch.nn.ReLU(),        torch.nn.Linear(N_HIDDEN,1),    )    net_dropped=torch.nn.Sequential(        torch.nn.Linear(1,N_HIDDEN),        torch.nn.Dropout(0.5),#放弃50%的神经元数据        torch.nn.ReLU(),        torch.nn.Linear(N_HIDDEN,N_HIDDEN),        torch.nn.Dropout(0.5),        torch.nn.ReLU(),        torch.nn.Linear(N_HIDDEN,1),    )    print(net_overfitting,net_dropped)         '''    Sequential(      (0): Linear(in_features=1, out_features=300, bias=True)      (1): ReLU()      (2): Linear(in_features=300, out_features=300, bias=True)      (3): ReLU()      (4): Linear(in_features=300, out_features=1, bias=True)    ) Sequential(      (0): Linear(in_features=1, out_features=300, bias=True)      (1): Dropout(p=0.5, inplace=False)      (2): ReLU()      (3): Linear(in_features=300, out_features=300, bias=True)      (4): Dropout(p=0.5, inplace=False)      (5): ReLU()      (6): Linear(in_features=300, out_features=1, bias=True)    )    '''4.训练过程    optimizer_ofit = torch.optim.Adam(net_overfitting.parameters(), lr=0.01)    optimizer_drop = torch.optim.Adam(net_dropped.parameters(), lr=0.01)    loss_func = torch.nn.MSELoss()    plt.ion()    for t in range(500):        pred_ofit = net_overfitting(x)        pred_drop = net_dropped(x)             loss_ofit = loss_func(pred_ofit, y)        loss_drop = loss_func(pred_drop, y)             optimizer_ofit.zero_grad()        optimizer_drop.zero_grad()        loss_ofit.backward()        loss_drop.backward()        optimizer_ofit.step()        optimizer_drop.step()             if t%10==0:          # 将神经网络转换成测试形式, 画好图之后改回 训练形式          net_overfitting.eval()#进入预测模式          net_dropped.eval()# # 因为 drop 网络在 train 的时候和 test 的时候参数不一样.               plt.cla()          test_pred_ofit=net_overfitting(test_x)          test_pred_drop=net_dropped(test_x)          plt.scatter(x.data.numpy(), y.data.numpy(), c='magenta', s=50, alpha=0.3, label='train')          plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c='cyan', s=50, alpha=0.3, label='test')               plt.plot(test_x.data.numpy(), test_pred_ofit.data.numpy(), 'r-', lw=3, label='overfitting')          plt.plot(test_x.data.numpy(), test_pred_drop.data.numpy(), 'b--', lw=3, label='dropout(50%)')               plt.text(0, -1.2, 'overfitting loss=%.4f' % loss_func(test_pred_ofit, test_y).data.numpy(), fontdict={'size': 20, 'color':  'red'})          plt.text(0, -1.5, 'dropout loss=%.4f' % loss_func(test_pred_drop, test_y).data.numpy(), fontdict={'size': 20, 'color': 'blue'})                    plt.legend(loc='upper left'); plt.ylim((-2.5, 2.5));plt.pause(0.1)                      # 将两个网络改回 训练形式          net_overfitting.train()          net_dropped.train()    plt.ioff()    plt.show() 添加测试模式的预测: 去除测试模式的预测:————————————————版权声明:本文为CSDN博主「小二哈a」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_37767529/article/details/124000565
  • [互动交流] 应用程序多级菜单拾取定位功能不正确
    如图所示当要拾取“销售财务”主菜单下面的“内销货款管理”时如图1,拾取的蓝色框就标记的是整个的二级菜单如图二,执行后实际运行结果是对“内销结算管理”菜单的操作。再下一级菜单也是类似问题。后来将“销售财务”的target中[]内的{}加入到“内销货款管理”的target[]才变正确的。用UI录制生成功能块的结果也是不正确的。希望能够改进这个问题。
  • [热门活动] 【有奖征文 第21期】说说你和ModelArts的故事,输出优质产品体验文章,赢开发者大礼包!(附小白用户免费体验入口)
    在华为云全栈全场景AI架构里面,ModelArts属于AI应用使能层。其使命是让AI应用开发再简单,以解决AI成为通用生产力,推动千行百业智能升级时所面临的两难两缺难题:AI开发难、AI行业落地难、AI算力稀缺、AI人才短缺。ModelArts是面向AI开发者的一站式开发平台,提供海量数据预处理及半自动化标注、大规模分布式训练、自动化模型生成及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。为了让广大的开发者朋友们可以近距离地体验、交流ModelArts,我们特举办本次ModelArts征文活动,邀请大家分享自己在学习、使用ModelArts产品过程中的心得与体验,你所了解的ModelArts技术架构、代码调试经验、训练技巧、故障解决经历、学习过程、反馈建议等等,都可以与我们分享。☞征文主题本次征文活动主题分为三大类,创作者可自由选择其一进行创作。一、技术干货1、立足具体应用场景,介绍ModelArts的场景优势及具体操作流程(可附带操作截图)。2、分享使用ModelArts的实战经验、应用技巧或成功案例,包含但不限于:自定义镜像制作、代码调试、训练调优、模型包使用规范、推理代码调试、OBS文件拷贝等内容。二、故障解决经验分享你在使用ModelArts过程中解决的问题,需要包含以下三点:问题现象、原因分析、处理方法。报错类型包括但不限于:CUDA相关问题文档路径错误ModelArts权限配置/文件访问权限问题NCCL问题CloudShell使用问题NPU使用问题OBS相关问题pip源问题OOM问题训练作业卡死作业退出码139问题磁盘空间不足问题作业性能下降问题VS Code/PyCharm的ssh访问问题自定义镜像问题访问公网相关问题模型导入问题模型推理代码开发问题三、畅所欲言1、你是怎么了解到ModelArts的,会用这款产品完成哪些工作,Ta怎样融入你的工作/学习、生活,哪些ModelArts的功能用的比较多?2、在产品使用过程中,你又有哪些感悟与心得要与大家分享?(例如,如何学习入门、解决报错的思路)☞征文规则1、活动面向企业开发者、个人开发者、高校开发者、生态合作伙伴等广大开发者群体。2、文章标题必须以【我与ModelArts的故事】开头。文章末尾需加上下面两句话:我正在参加【有奖征文第21期】说说你和ModelArts的故事,输出优质产品体验文章,赢开发者大礼包!cid:link_7文章跟华为云产品ModelArts相关,所以需要加上【AI开发平台ModelArts】和【云端实践】标签。3、建议投稿内容字数不少于500字(不含代码段),语句通顺、文章逻辑清晰、排版整洁、代码规范,尽量图文并茂(有技术架构图或者分析图等做支撑)。4、文章保证原创首次发布,如发现投稿内容为转载、复制、抄袭、恶意拼接、灌水等侵权作弊行为,均视为无效并取消参与资格。5、文章须符合征文主题及平台内容规范,不得出现违规负面内容。详见华为云开发者平台内容互动使用协议6、参加征文活动的文章作者拥有著作权,华为云拥有使用权、修改权等。☞参与方式新用户:①小白用户体验入口:ModelArts使用简介与免费试用②进行产品体验后即可参与活动老用户可直接发博文。>>>立即发表博文· 以上奖品均为实体奖品,具体视出库情况而定。☞我们需要哪些主题的稿件?如果你还不知道该怎么写,参考以下文章,可以让你更快上手:VSCode一键接入Notebook体验算法套件快速完成水表读数人工智能开发中,OBSutil如何一键配置日志提示“no socket interface found”☞评奖规则届时将由华为云开发者社区、EI团队共同参与评审。其他说明:1、一二三等奖不能叠加。2、一二三等奖可与创作小能手奖叠加。3、参与奖不与一二三等奖和创作小能手叠加。4、有奖征文投稿数量不计入月度激励活动文章数量。☞你将获得什么?我们会把收到的优质内容汇编成册,并注明原作者,积累行业口碑,开放给圈内开发者下载查阅,提供实践参考。对于贡献优质内容的作者,我们还将送出各项大礼!同时,在华为云站内外10+个技术社区醒目位置进行推荐,给与百万级流量资源。优质作者更可获得长期约稿和更多内容合作机会。☞问题咨询如果有任何问题,可扫描下方二维码咨询。添加微信时请备注:有奖征文+华为云博客昵称!更多ModelArts技术干货、实践经验,可前往ModelArts开发者论坛。为了方便开发者之间进行技术交流、了解ModelArts最新动态,欢迎扫码加入华为云ModelArts关键AI能力交流群。如果大家在征文中遇到有关华为云产品体验方面的问题建议,请到【云声平台】提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。☞快来华为云社区博客,一起遨游技术海洋吧! 点击立即体验部分奖品展示:华为云云宝公仔开发者定制礼盒3(A5平装本+450ml温控杯+金属笔)开发者定制双肩包开发者定制短袖-T恤开发者定制Polo衫开发者定制折叠雨伞开发者定制帆布袋
  • [应用开发] 在MDC300昇腾Ascend310上,推理时间远超预期
    当前用的Ascend310,官方YOLOV5S推理时间约380毫秒,SIGMOD函数已被替换,性能上没有明显提升,文档中说的算力为60TOPS,这个时间严重超时,理论上时间应该在3.5毫秒左右,实际上相差了两个数量级,还没有8核CPU推理的速度快,希望提供明确的解决方案
  • [互动交流] 网页获取数据异常
    File "D:.RPA.RPA设计.python.lib.site-packages.pandas.io.formats.excel.py", line 834, in writewriter = ExcelWriter( # type: ignore[abstract]File "D:.RPA.RPA设计.python.lib.site-packages.pandas.io.excel._openpyxl.py", line 52, in __init__super******File "D:.RPA.RPA设计.python.lib.site-packages.pandas.io.excel._base.py", line 925, in __init__self.handles = get_handle(File "D:.RPA.RPA设计.python.lib.site-packages.pandas.io.common.py", line 711, in get_handlehandle = open(handle, ioargs.mode)PermissionError: [Errno 13] Permission denied: 'D:..RPA..用例..网页数据.xlsx'[2023-03-31 16:46:55,117] [INFO] - com.huawei.antrobot.logging.log_output.log_output(log_output_start_end:158) - end running action: extractWebData line:12 [网页数据拾取] in playbackScript.xml with result:None[2023-03-31 16:46:55,117] [INFO] - studio.logger(common_log:178) - 完成执行[原子命令] [playbackScript.xml 第12行] 网页数据拾取 [网页数据拾取] [NOK] [RobotUncaughtError] [系统执行错误: 发生了未捕获异常,详情:PermissionError(13, 'Permission denied')][2023-03-31 16:46:55,118] [INFO] - com.huawei.antrobot.logging.log_output.log_output(log_output_start_end:158) - end running logic: robot line:0 [None] in playbackScript.xml with result:None[2023-03-31 16:46:55,118] [ERROR] - studio.logger(common_log:178) - 完成执行[脚本] [采集] [NOK] [RobotUncaughtError] [系统执行错误: 发生了未捕获异常,详情:PermissionError(13, 'Permission denied')][2023-03-31 16:46:55,123] [INFO] - studio.logger(common_log:178) - 结束机器人[2023-03-31 16:46:55,124] [INFO] - __main__.antrobot(<module>:119) - robot finished
总条数:7868 到第 页
上滑加载中