提前建立下载目录文件夹
import baostock as bs import pandas as pd import datetime # 是否删除停盘数据 DROP_SUSPENSION = True def load_stk_list(): df = pd.read_csv('D:/stk_list.csv') return df['code'].tolist() def convert_time(t): H = t[8:10] M = t[10:12] S = t[12:14] return H + ':' + M + ':' + S def download_data(stk_list=[], fromdate='1990-12-19', todate=datetime.date.today(), datas='date,open,high,low,close,volume,amount,turn,pctChg', frequency='d', adjustflag='2'): for code in stk_list: print("Downloading :" + code) k_rs = bs.query_history_k_data_plus(code, datas, start_date=fromdate, end_date=todate.strftime('%Y-%m-%d'), frequency=frequency, adjustflag=adjustflag) datapath = 'D:/baostock/' + frequency + '/' + code + '.
【调参Tricks】WhiteningBERT: An Easy Unsupervised Sentence Embedding Approach
目录 总述模型实验及结论代码优化参考 总述 该文主要介绍了三种使用BERT做Sentence Embedding的小Trick,分别为:
应该使用所有token embedding的average作为句子表示,而非只使用[CLS]对应位置的表示。在BERT中应该使用多层的句向量叠加,而非只使用最后一层。在通过余弦相似度做句子相似度判定的时候,可以使用Whitening操作来统一sentence embedding的向量分布,从而可以获得更好的句子表示。 模型 文中介绍的前两点均不涉及到模型,只有第三点Whitening操作可以做简要介绍。
出发点: 以余弦相似度作为向量相似度衡量的指标的是建立在“标准正交基”的基础上的,基向量不同,向量中各个数值所代表的的意义也变不一样。然后经过BERT抽取之后的句向量所处的坐标系可能并非基于同一个“标准正交基”的坐标系。
解决方案: 将各个向量归一化到同一个标准正交基的坐标系中。一个猜测是,预训练语言模型生成的各个句向量应该在坐标系中的各个位置是相对均匀的,即表现出各项同性。基于这个猜测,我们可以将所有句向量做归一化,使之满足各向同性。一个可行的方案是将句向量的分布规约成正态分布,因为正态分布满足各项同性(数学定理)。
做法:
内容截图自苏神的博客: 链接
实验及结论 应该使用所有token embedding的average作为句子表示,而非只使用[CLS]对应位置的表示。
叠加BERT的1,2,12层这三层的向量效果表现最好。
Whiten操作对于多数预训练语言模型而言均有效果。
代码 def whitening_torch_final(embeddings): # For torch < 1.10 mu = torch.mean(embeddings, dim=0, keepdim=True) cov = torch.mm((embeddings - mu).t(), (embeddings - mu)) # For torch >= 1.10 cov = torch.cov(embedding) u, s, vt = torch.svd(cov) W = torch.mm(u, torch.diag(1/torch.sqrt(s))) embeddings = torch.
参数 类型
默认值描述sortintInteger.MAX_VALUE值越小越靠前readConverterExpString空读取内容转表达式 (如: 0=男,1=女,2=未知)nameString空导出到Excel中的名字separatorString,分隔符,读取字符串组内容dateFormatString空日期格式, 如: yyyy-MM-ddscaleint-1BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)roundingModeintBigDecimal.ROUND_HALF_EVENBigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVENdictTypeString空如果是字典类型,请设置字典的type值 (如: sys_user_sex)columnTypeEnumType.STRING导出类型(0数字 1字符串 2图片)heightString14导出时在excel中每个列的高度 单位为字符widthString16导出时在excel中每个列的宽 单位为字符suffixString空文字后缀,如% 90 变成90%defaultValueString空当值为空时,字段的默认值promptString空提示信息comboStringNull设置只能选择不能输入的列内容targetAttrString空另一个类中的属性名称,支持多级获取,以小数点隔开isStatisticsbooleanfalse是否自动统计数据,在最后追加一行统计数据总和typeEnumType.ALL字段类型(0:导出导入;1:仅导出;2:仅导入)alignEnumType.AUTO导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)handlerClassExcelHandlerAdapter.class自定义数据处理器argsString[]{} 自定义数据处理器参数
原文链接:https://blog.csdn.net/weixin_42434478/article/details/126874454
使用vue框架写法
<div class="container"> <el-input v-model="value" type="number"/> </div> // 选择器前要加::v-deep <style lang="scss" scoped> .inputScore-container{ ::v-deep input::-webkit-outer-spin-button, ::v-deep input::-webkit-inner-spin-button { -webkit-appearance: none !important; } ::v-deep input[type=‘number’] { -moz-appearance: textfield !important; } } </style> 如果是input标签type=number,将上述css代码中::v-deep去掉即可
1、安装VS2017(官网下载安装)
在安装过程中需要在单个组件中勾选:用于桌面的VC++ 2015.3 v140 工具集(x86,x64)
2、安装CUDA驱动
查看自己电脑的显卡版本,不可安装高于本机版本的CUDA驱动
控制面板->硬件和声音->NVIDIA控制面板->系统信息->组件
3、配置环境变量
我的电脑→右击→属性→高级系统配置→环境变量
1)安装后可以看到系统中多了CUDA_PATH和CUDA_PATH_V10_0两个环境变量,接下来要在系统中添加以下几个环境变量:
CUDA_LIB_PATH %CUDA_PATH%\lib\x64
CUDA_BIN_PATH %CUDA_PATH%\bin
CUDA_SDK_PATH C:\ProgramData\NVIDIA Corporation\CUDASamples\v9.1
CUDA_SDK_BIN_PATH %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH %CUDA_SDK_PATH%\common\lib\x64
在cmd中输入set cuda,如图所示,表示环境配置成功。
配置成功后,重启计算机使环境变量生效。
4、建立VS2017下的cuda程序
(1)新建项目
打开VS2017->新建项目->Win32控制台应用程序->空项目勾选
(2)更换平台工具集
右键项目->属性->常规->平台工具集->选择“Visual Studio 2015(v140) ”
(3)调整配置管理器平台类型
右键项目->属性->配置管理器->全改为“x64”
(4)配置生成属性
右键项目->生成依赖项->生成自定义->勾选“CUDA 9.1XXX”
(5)配置基本库目录
注意:目录地址要根据本机CUDA安装的位置进行配置
右键项目→属性→配置属性→VC++目录,添加以下两个“包含目录”:
D:\matlab\extern\include
H:\cuda\cuda_anzhaung\include
右键项目→属性→配置属性→VC++目录->库目录:
D:\matlab\extern\lib\win64\microsoft
H:\cuda\cuda_anzhaung\lib\x64 (6)配置CUDA静态链接库路径
右键项目→属性→配置属性→链接器下面→常规→附加库目录,添加以下目录:
$(CUDA_PATH_V9_0)\lib\$(Platform)
(7)选用静态链接库
右键项目→属性→配置属性→链接器→输入→附加依赖项,添加以下库:(C:\ProgramFile\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64查看你自己的lib文件都有哪些,然后再添加)
cublas.lib;cublas_device.lib;cuda.lib;cudadevrt.lib;cudart.lib;cudart_static.lib;cufft.lib;cufftw.lib;curand.lib;cusolver.lib;cusparse.lib;nppc.lib;nppial.lib;nppicc.lib;nppicom.lib;nppidei.lib;nppif.lib;nppig.lib;nppim.lib;nppist.lib;nppisu.lib;nppitc.lib;npps.lib;nvblas.lib;nvcuvid.lib;nvgraph.lib;nvml.lib;nvrtc.lib;OpenCL.lib;libmat.lib;libmx.lib;libmex.lib;libeng.lib
(8)配置源码文件风格
右键源文件->添加->新建项->选择“CUDA C/C++File”
右键“xxx.cu”源文件->属性->配置属性->常规->项类型->设置为“CUDA C/C++”
目录
一、什么是JSP
二.为什么学习JSP
1.JSP的运行原理
1.1创建一个JSP页面
1.2运行JSP
1.3JSP的运行原理分析
1.4JSP的脚本元素
三、JSP的开发模式之MVC模式
1.动态网页开发模式的发展
四、开发中的路径问题
1.什么时候会遇到路径问题
2.路径的分类
五、案例需求介绍
1.案例需求描述
2.案例流程分析
3.MVC如何在案例中应用
4.案例准备-创建数据库
1.建表语句
5.案例准备-项目环境搭建
1.创建web项目
2.创建相关的包结构
6.案例准备-引入相关资源
1.引入相关的jar包:
2.引入C3P0配置文件
3.引入JDBC开发的工具类
7.案例准备-创建登录页面
1.登录页面实现
2.登录页面效果
8.案例代码-登录代码实现
1.登录代码实现流程
2.登录代码实现
3.登录的Servlet的业务代码
4.处理数据部分代码
5.登录代码错误信息回显
6.记录登录成功的人数分析
六、请求转发和重定向完成页面跳转
1.请求转发
1.1请求转发的写法
1.2请求转发的代码实现
1.3请求转发的效果
2.重定向
2.1重定向的写法
2.2重定向的代码实现
2.3重定向的效果
3.请求转发和重定向区别
1.请求转发和重定向原理
2.请求转发和重定向区别总结
3.代码演示请求转发和重定向区别
总结
一、什么是JSP JSP:Java Server Pages (Java服务器端页面),其实就在HTML中嵌入Java代码。
二.为什么学习JSP SUN公司提供了动态网页开发技术:Servlet。Servlet自身有一些缺点,SUN公司发现了这些问题,推出了一个新的动态网页开发技术JSP。
Servlet的缺点:
Servlet需要进行配置,不方便维护Servlet很难向网页中输出HTML页面内容 1.JSP的运行原理 1.1创建一个JSP页面 1.2运行JSP JSP需要发布到服务器中才可以运行的。
发布项目到Tomcat中访问JSP页面 1.3JSP的运行原理分析 JSP文件翻译成Java文件,将这个Java文件编译生成class文件,运行class文件。
1.4JSP的脚本元素 1.4.1什么是JSP的脚本元素:
JSP = HTML + Java代码 + JSP自身东西
目录
1.uboot源码编译
2.确定u-boot的入口函数和入口地址
3. _start函数分析
4.lowlevel_init函数分析
5._main函数分析
6.board_init_r函数分析
7.run_main_loop函数分析
8.cmd_process分析
9.bootz 启动 Linux 内核过程
10.总结
1.uboot源码编译 首先是将uboot源码编译一次,分析需要结合编译后的文件
.config 是由make xxx_defconfig之后产生的一个副本
u-boot.lds是 arch/arm/cpu/u-boot.lds的副本
u-boot.map是u-boot.bin的内存映射文件,详细记录了固件的内存分布情况
2.确定u-boot的入口函数和入口地址 通过u-boot.lds链接文件可以知道uboot的入口点是_start
通过u-boot.map可以知道u-boot的链接起始地址是0x87800000
3. _start函数分析 _start函数在文件 arch/arm/lib/vectors.S 中有定义
其实就是一个中断向量表,和单片机的套路是一样的,第一个执行的是reset复位函数,reset 函数在 arch/arm/cpu/armv7/start.S 文件中,源码中有众多的start.s文件,但imx6ull是ARMV7架构的,所以是armv7下的start.S
reset的调用关系如下图
4.lowlevel_init函数分析 函数 lowlevel_init 在文件 arch/arm/cpu/armv7/lowlevel_init.S 中定义
规划内存,设置栈顶地址,预留出global data 的位置,最终的规划后的内存如下
此时的uboot还是在内部的ocram内存中,还没搬迁到SDRAM中运行
最后调用s_init函数,在arch/arm/cpu/armv7/mx6/soc.c中,但此函数对于imx6ull来说是一个空函数,啥事不做。
5._main函数分析 _main 函数在文件 arch/arm/lib/crt0.S 中
经过relocat_code和relocate_vetors函数此时的uboot已经是运行到外部的sdram中了
最终的内存分配图如下
初始化一系列外设,比如串口、定时器,或者打印一些消息等。
初始化 gd 的各个成员变量,uboot 会将自己重定位到 DRAM 最后面的地址区域,也就
是将自己拷贝到 DRAM 最后面的内存区域中。这么做的目的是给 Linux 腾出空间,防止 Linux
kernel 覆盖掉 uboot,将 DRAM 前面的区域完整的空出来。
图片
一、数据来源介绍
本次数据来源于网络,我们在网上查询大学平面图,经过对比我们选取长春工业大学北湖校区,大家可以在网上找一下自己学校的平面图来操作一下。
二、数据预处理
图片合成 由于长春工业大学北湖校区分为东区和西区,网络上下载的图片是分开的两张,对比百度地图,我们利用PowerPoint将两张图片合成为一张。
两张图片加载到PowerPoint中根据百度地图中东区和西区的相对位置将图片放在相应的位置组合在一起,并另存为图片。
定义投影 利用腾讯位置服务网站查询,长春工业大学北湖校区的经纬度坐标范围在东经125.386076125.412134,北纬43.99334544.001001。
对比UTM投影分带查询表,再利用定义投影工具时,投影坐标选择WGS 1984 UTM Zone 51N,图中黄色感叹号出现的原因是之前作者已经为图层设置了投影坐标系,不必太过在意。
工具位置:数据管理工具 -> 投影和变换 -> 定义投影
投影坐标位置:投影坐标系 -> UTM -> WGS 1984 -> Northern Hemisphere->WGS_1984_UTM_Zone_38N
地图配准 在菜单栏或工具栏空白处单击鼠标右键,然后选中“地理配准”并左键单击,打开地理配准浮动工具条,在进行地图配准时浮动工具条上要正确选择要配准的图层。
我们利用腾讯位置服务网站查询下长春工业大学北湖校区西区操场门前的岔路口的坐标为北纬43.996937,东经125.389678。
我们在ArcMAP中利用地图配准工具在相应位置添加控制点,点击地理配准工具条上的添加控制点按钮,鼠标变成十字叉丝,在地图上相应位置鼠标左键放置控制点,右键选择输入X和Y(经纬度坐标,X为纬度Y为经度)。
利用同样的方法循环多次,输入多个控制点坐标即可。
创建图层 在自己想要存储的目录中创建图层,若是普通文件夹就新建ShapeFile,若是地理数据库就新建要素类,这里仅介绍后者。
在第一页命名图层名称,第二页设置相同的投影坐标系,如果忘记了可以利用导入的方式。
点击导入,选择希望与之一样的投影坐标系的图层,其它页均选用默认选项即可。
这里如果想对建筑物进行分类的话可以创建多个图层。
三、矢量化处理
还是在菜单栏或工具栏空白处单击鼠标右键,然后选中“编辑器”并左键单击,打开编辑器浮动工具条,并点击编辑器 -> 开始编辑。
点击编辑器浮动工具条最右侧添加要素,在出现的对话框中选择要编辑的图层,下方构造工具选择面。
对比长春工业大学北湖校区平面图绘制要素。
编辑结束后,记得保存并点击编辑器浮动工具条里面的停止编辑,最终成果图就像下面这个样子。
四、3D校园展示
将图例中的图层添加到ArcScence,依次右键各图层,选择属性 -> 拉伸,勾选【拉伸图层中的要素。可将……巴拉巴拉……】,在下方填入拉伸值或表达式,如果有楼层字段可选用拉伸值为楼层字段,拉伸值的大小决定了楼层高度。
设置完拉伸以后,可以再设置一下颜色,最终所呈现的效果就像下面这样。
END -
问题描述一: HTTP Host availability check is taking a long time…[!] HTTP Host Availability
HTTP host “https://maven.google.com/” is not reachable.
Reason: An error occurred while checking the HTTP host: 信号灯超时时间已到
解决方案: 1、找到flutter sdk的文件目录,依次找到flutter/packages/flutter_tools/lib/src/http_host_validator.dart文件
2、将https://maven.google.com/ 修改为https://dl.google.com/dl/android/maven2/
3、关闭所有打开了flutterSDK的程序,找到flutter\bin目录下的flutter_tools.snapshot文件,永久删除。
4、Win+R运行cmd命令窗口执行 flutter doctor 问题解决。
问题描述二: HTTP host "https://pub.dev/" is not reachable. 解决方案: 配置国内的pub插件镜像地址,参数如下
PUB_HOSTED_URL https://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URL https://storage.flutter-io.cn 笔者配置的是Flutter社区的镜像,更多镜像参考Flutter中文网
问题描述三: HTTP host "https://cloud.google.com/" is not reachable. 解决方案: 暂时未解决!!!
FTP是什么?
FTP,表示文件传输协议(File Transfer Protocol),是标准的Internet 协议,一种客户端-服务器协议。它可以将信息从用户正在处理的计算机移动到托管网站的服务器;简单来说:就是一种在计算机之间传输文件的方式。
例:用户可以在一台计算机上通过FTP客户端(一个程序)将文件上传到FTP服务器,在从另一台计算机的FTP客户端上下载文件。因此,FTP偶尔也会用作共享文件的方式。一个人可以将文件上传到FTP服务器,然后与另一个人共享一个链接,让另一个人可以把文件下载到自己的计算机上。
TFTP是什么?
TFTP,表示普通文件传输协议(Trivial File Transfer Protocol ),是一种用于传输文件的简单高级协议。
TFTP是一种Internet软件实用程序、一种在网络设备之间传输文件的技术,是文件传输协议(FTP)的简化版本。它可以用来传输比文件传输协议(FTP)更易于使用但功能较少的文件,主要用于从远程服务器读取和写入文件/邮件。
FTP和TFTP的区别:
1、安全性区别
FTP支持登录安全,具有适当的身份验证和加密协议,在建立连接期间需要与FTP身份验证通信。
TFTP是一种开放协议,缺乏安全性,没有到位的加密机制,与TFTP通信时不需要认证,这意味着通过互联网在开放服务器上传输文件非常危险,且数据包有可能会丢失。
2、传输层协议的区别
FTP使用TCP作为传输层协议,通过单独的TCP连接从控制命令发送数据。
TFTP使用UDP作为传输层协议,因为UDP是无连接协议,所以TFTP不使用连接。
3、使用端口的区别
FTP使用2个端口:TCP端口21,是个侦听端口;TCP端口20或更高TCP端口1024以上用于源连接。
TFTP仅使用一个具有停止和等待模式的端口:端口69。
4、RFC的区别
FTP是基于RFC 959文档,带有其他RFC涵盖安全措施;TFTP基于RFC 1350文档
5、执行命令的区别
FTP有许多可以执行的命令(get,put,ls,dir,lcd)并且可以列出目录等。
TFTP只有5个命令可以执行(rrq,wrq,data,ack,error)。
总结:以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。喜欢的宝子们点点关注~
首先需要一个表单提交的JSP页面,或者HTML页面也行,这个界面要放在你的Web目录下才可以被识别到,并可以正常的访问,不要和Servlet一样放在src目录下
也不是不可以,但是访问的时候会有诸多麻烦,不如直接放在Web目录下
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: Administrator Date: 2022/10/17 Time: 19:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登陆界面</title> </head> <body> <form action="<c:url value="/LoginServlet"/>"> <table> <tr> <td>用户名:</td><td><input type="text" name="username"></td> </tr> <tr> <td>密码:</td><td><input type="password" name="password"></td> </tr> </table> <button type="submit">提交</button> </form> </body> </html> 然后是一个封装了用户信息的用户类
package Semester_3.Login; public class User { private String username; private String password; public User() { } public User(String username, String password) { this.
1. (继承、this 和super 关键字)有以下代码 class Super{ public Super(){ System.out.println("Super()"); } public Super(String str){ System.out.println("Super(String)"); } } class Sub extends Super{ public Sub(){ System.out.println("Sub()");//在这紧上面省略了Super(); } public Sub(int i){ this(); System.out.println("Sub(int)"); } public Sub(String str){ super(str); System.out.println("Sub(String)"); } } public class TestSuperSub{ public static void main(String args[]){ Sub s1 = new Sub();//调用Sub()无参构造 System.out.println();//芝士换行,自己加的原题没有 Sub s2 = new Sub(10); System.out.println(); Sub s3 = new Sub("hello"); } } Super() Sub() Super() Sub() Sub(int) Super(String) Sub(String) 2.
工作 首次引入Jain’s Index到FL领域引入公平性度量参数α,使公平性与有效性可以通过α权衡给出了α的确定方法(梯度下降求解)实验验证 公平性度量 引入Jain’s Index J(x)的取值在[1/N,1]区间
当J(x)取1时最公平,此时x1、x2、、、xn之间的方差最小
J(x)取1/N时方差最大
因此Jain’s Index借鉴到此处,十微克考察系统“公平性”。在后续工作中,将会用R(实际用户效用)替代公式中的xi。
FL公平性和有效性的度量方法 量化定义FL公平性和有效性 首先定义用户效用:
Rk=ak·pk(实际用户效用=模型准确率·聚合权重)
(模型准确率指,本轮中心参数服务器下发给参与者的全局模型,经参与者自己计算后获取的的准确率)
(聚合权重指,本轮中,各个节点将自己的梯度或模型参数发给中心参数服务器后,参数服务器根据【①上传的参数或梯度②上传的准确率】为各个参与者设计的聚合权重)
对于每个用户来讲,即希望准确率a高也希望聚合权重p高,用乘积作为效用
进一步定义系统 有效性量化E、公平性量化J:
有效性量化E:
是所有用户效用的和,它越高说明整个系统的有效性越高。
公平性量化J:
取值区间为[1/k,1]
是所有用户效用的Jain’s Index,用它衡量所有用户效用的分布是否均匀。(更直白的理解是,对于我们想实现的公平来讲,理想情况下,Jain’s Index=1,此时大家的效用都是相同的,也即对准确性a越高的用户应该指定更低的聚合权重p,反之准确性a越低的用户应该指定更高的聚合权重p)
权衡FL公平性和有效性的方案 根据每个用户的计算出的准确率,设计了最优权重p(opt):
(注意公式中指数部分是α,指的是超参数α,而底数部分是a,指的是准确率a)
在该权值下,将其带入刚刚定义的有效性和公平性量化得到:
根据论文附录的证明可知,以上定义的最优权值p(opt),可以使得J(α)和随着α 的增大而增大,而使得E(α)和随着α 的增大而减小
也即:超参数α的增大,公平性提高,而有效性降低。
这也进一步说明了α可以作为协调系统公平性和有效性权衡的量。
关于最优权重p(opt)的设计 作者设计的最优权重p(opt),其实就是一个可以由α调节的“准确率在所有参与者准确率之和中的权重”
可以看出,α对该权重(聚合权重)的影响在于:
当α=1时,此时指数项为1,即准确率在所有参与者准确率之和中的权重当α>1时,随α变大,权重的分配会倾斜给准确率a低的用户,他们会获得相对更高的权重(相比与α=1时)当α<1时,随α变小,权重的分配会倾斜给准确率a高的用户,他们会获得相对更高的权重(相比与α=1时) 因此这一设计是有效的,可以实现对公平性的调节。实际算法中,α尽量取大,以此照顾低准确率参与者进而实现公平。α的增大,使得高准确率参与者的权重下降,系统总效用和下降,所以必然导致有效性的降低。
因此α的确在其中可以实现二者的衡量,此处的设计是α-Fedavg算法中α设计的核心和精髓。
参数α 的确定方法 系统优化问题描述:
即,在最低限度满足系统相比经典FL最终模型的有效性的基础上,最大限度去提高α使得公平性达到此基础上的最大值。
具体算法直接求解α较为困难,因此采用梯度下降的方法求解α,通过逼近ET来确定最优的α。算法描述如下:
此框架下的完整的联邦学习过程 (此处省略经典Fedavg算法的描述。)
α-Fedavg算法描述如下:
其中:
服务器端:
⑥描述的是:统计参与者准确性,函数返回客户端传回的准确性
⑧描述的是:更新参与者模型,函数返回更新后的模型参数或梯度
⑫描述的是:根据⑥ 返回的a和⑧返回的w,可以计算出各个参与者的最优聚合权值
⑮描述的是:根据⑫计算出的聚合权重,全局模型聚合操作
参与者端:
①函数:获得新的全局模型,奖本地模型替换为新的全局模型,然后进一步训练模型,并返回新的更新后的参数或梯度
⑩函数:客户端根据新下发的全局模型计算准确率,并返回准确率a
算法扩展 α-Fedavg考虑的情况是:
诚实的参与者诚实但好奇的服务器 由于在实际场景中,需要考虑不诚实的参与者,可能会谎报模型参数或准确率,对于谎报准确率目前有成熟的解决方案,可以借助合成数据发布技术。(而对于谎报模型参数的参与者暂时没有提出解决方案)
合成数据发布技术简单介绍:
通信开销 与Fedavg相比:
其中第一个红圈处:服务器的额外开销,主要是计算各个参与者权重p付出的
其中第二个红圈处:参与者的额外开销,主要是计算全局模型在本地的准确率a付出的
多环境配置的实现方式 .env # 所有情况下都会加载 .env.local # 所有情况下都会加载,但会被 git 忽略 .env.[mode] # 只在指定模式下加载 .env.[mode].local # 只在指定模式下加载,但会被 git 忽略 注意:
.env.xxx 的文件,配置的变量必须是以 VITE_ 开头:
如: VITE_BASE_URL=/api
如果你想自定义 env 变量的前缀,请参阅 envPrefix。可以通过import.meta.env获取配置的不同环境下的变量(import.meta.env 在vite.config.ts中获取不到) 在vite.config.ts中配置proxy vite提供了一个loadEnv函数,用于加载到不同环境配置文件相关参数。
loadEnv:加载 envDir 中的 .env 文件。默认情况下只有前缀为 VITE_ 会被加载,除非更改了 prefixes 配置。(envDir :用于加载 .env 文件的目录)
function loadEnv( mode: string, envDir: string, prefixes: string | string[] = 'VITE_' ): Record<string, string> import { createVitePlugins } from './build/vite/plugins'; import { resolve } from 'path'; import { ConfigEnv, UserConfigExport, loadEnv } from 'vite'; const pathResolve = (dir: string) => { return resolve(process.
Abaqus应力导出:
‘Tools’--- Probe values
在Probe Values里面可以选择需要导出的信息,比如‘Nodes’或者‘Elements’
如果需要导出多个应力值或者其他信息可以选择 ‘Components’ 这个选项。
选择‘Selected’只输出一个正应力S33(对应截图中的)
如果是‘All Direct’,则是输出6个正应力S11, S22, S33, S12, S13, S23
‘All Principals’ 输出三个正应力
在输出应力信息的时候,我们会发现,在同一个节点上会由几个应力值,比如节点1上就有十几个应力值。如下图所示:
为什么会是这样的结果??困惑了好久,知道看到仿真科技论坛博主army的回到,下面我直接引用其回答:
”首先某节点是n个单元的公共节点,每个单元在该节点都有一个应力值,比如节点1为周围四个四边形单元的公共节点,那么每个四边形单元在节点1都有一个应力的外推值,假定为(1e6,1.5e6,1.7e6,2e6),最大与最小应力差值为1e6;假定在整个模型显示区域的最大应力与最小应力差值为4e6,那么节点应力相对变化率为1e6/4e6=0.25。在节点1的4个应力值是否会进行平均计算呢?由设定的avg值决定,节点应力相对变化率低于设定avg值的将会被平均。
对于节点1,如果设定avg = 0.3,那么节点1 输出值为平均应力(1e6+1.5e6+1.7e6+2e6)/ 4=1.55e6,如果设定avg = 0.2,那么节点1处的应力值将不参与平均运算。avg设定为1 ,则意味着所有显示区域所有节点的应力计算都参与平均,所得云图越光滑“
本图左侧是avg=75%,右侧是avg = 1
所以对应的处理应该是对同一节点的几个力求和取平均。
修改avg大小的方法请参见:
Abaqus--默认的avg=75%修改方法_themingyi的博客-CSDN博客_abaqus avg
2022/10/18更新一个我最近的处理思路:
themingyi作者1 秒前
谢谢评论。关于abaqus如何处理的我现在没有搞清楚。在误差允许的情况下我都是对一个节点的所有的力取平均。
我的另外一种处理办法是通过python子程序获取距离此节点最近的单元(需要根据单元的质心坐标判断),然后提取此高斯积分点上的应力值,因为高斯积分点上的值是准确的且是唯一的(因为节点的应力是从高斯积分点插值过去的),但是这个办法比较麻烦。
crowcrows2022.07.04
楼主标题党…说了半天也没说怎么处理多个数值
本部分求和取平均的程序后续给出。。。。。。
有问题欢迎讨论:
themingyi123@gmail.com
参考:
【1】[前处理] 请问:AVG:75%是什么含义 【见1-9楼】
..:: CAE专区 ::..-请问:AVG:75%是什么含义 【见1-9楼】,{Simwe仿真论坛(forum.simwe.com),CAE/CAD/CAM/,FEA/FEM/有限元分析论坛-(手机验证注册)} - Powered by Discuz!
【2】ABAQUS等有限元软件后处理云图中Avg:75%的含义
新浪博客
【3】Understanding result value averaging
http://bobcat.nus.edu.sg:2080/English/SIMACAECAERefMap/simacae-c-resconceptaverage.htm
【4】Controlling result averaging
前言 动态内存管理引起的所谓内存泄漏的问题是编程领域的一大顽疾,它的成因非常直截了当---“只拿不还”,但它产生的缘由有时却非常隐晦需要非常仔细布局你的每一行代码才能抵抗它们对你的系统的侵蚀。而智能指针就能解决上面的问题,它的主要的功能就是自动帮我们管理内存。
一、智能指针 1、智能指针主要解决以下问题
内存泄漏:内存手动释放,使用智能指针可以自动释放 共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题 2、 智能指针的类型(其中后三个是C++11支持,并且第一个auto_ptr已经被C++11弃用) auto_ptr shared_ptr 共享对象的所有权,但性能略差。unique_ptr 独占对象的所有权,由于没有引用计数,因此性能较好。 weak_ptr 配合shared_ptr,解决循环引用的问题 3、智能指针的使用
3.1 shared_ptr
3.1.1 内存模型:
shared_ptr 内部包含两个指针,一个指向对象,另一个指向控制块 (control block) ,控制块中包含一个引用计数(reference count), 一个弱计数 (weak count)和其它一些数据,内存模型如下图1。 std::shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存,每拷贝一次引用计数reference count就加1,每一次析构就减1。再最后一个shared_ptr析构的时候,内存才会被释放。 shared_ptr共享被管理对象,同一时刻可以有多个shared_ptr拥有对象的所有权,当最后一个 shared_ptr对象销毁时,被管理对象自动销毁。 图 1 3.1.1 基本用法和函数
shared_ptr的初始化
// 初始化的三种方式,优选第1 和第 2种,因为 make_shared是 构造函数,更高效 auto s = make_shared < int > ( 100 ); shared_ptr < int > s = make_shared < int > ( 100 ); shared_ptr < int > sp1 ( new int ( 100 )); //不能将一个原始指针直接赋值给一个智能指针,例如,下面这种方法是错误的: std::shared_ptr < int > p = new int ( 1 ); shared_ptr的常用函数 s.
//el-tree点击事件 handleClick(e,node){ console.log(node,'点击了节点'); if(e.label !== undefined){ //此处为条件成立后的代码 } //或者只能点击最后一级 if(!node.childNodes.length == 0){ //除了最后一级其他节点disabled都为true,不可点击 node.disabled = true; } }
下载地址
jquery宝贝详情购买页面,商城网站常见的商品购买页样式。图片放大镜显示。
dd:
Func<int,bool> f2=delegate(int i) { return i>5; }; Console.WriteLine(f2(9)); Func<int,bool>f22=i=>i>5; Console.WriteLine(f22(2)); int[] num = new int[]{3,8,9,15,34,39 }; //IEnumerable<int> result= num.Where(i => i>10); //IEnumerable<int> result = MyWhere2(num, a => a > 10); //C# var定义的变量为类型推断,此处根据函数返回值,推断result 为List<int> var result = MyWhere2(num, a => a > 10); foreach (int i in result) { Console.WriteLine(i); } //IEnumerable是可枚举类型,一般在迭代时应用广泛,如foreach中要循环访问的集合或数组都实现了IEnumerable接口。只要能够遍历,都直接或间接实现了IEnumerable接口。 static IEnumerable<int> MyWhere(IEnumerable<int> items,Func<int,bool> f) { List<int> result = new List<int>(); foreach (var item in items) { if(f(item)==true) result.
今天朋友碰见一个需求,就是后端接口返回一个数组,刚开始只展示数组中第一个对象,然后点击对象中的某个按钮会展示数组第二个对象,以此类推。
自己写了个数组
我的思路呢就是在页面初始化展示的时候,把请求回来的数组下标为1的数组对象push进一个新数组
这个this.j是我在data里声明的一个变量,这样的话在展示这个数组的时候就会只展示第一个
他们的业务是点击data里面的list里的某个对象然后触发data这个数组的下个对象
给需要点击的添加点击事件
我这里只是做个演示,正常情况下使用v-if进行判断的,stutas=1时代表的是为选中状态也就第二个对象展示的样式,0代表的就是第一个已经选中的
这里就是实现这个功能最主要的部分
下面是完整的代码,可以开个新页面看下效果
<template> <div> <div class="app"> <div v-for="(item, index) in list" :key="index"> <div class="list"> <span>{{ item.name }}</span> <span v-show="item.stutas == 1" id="name" v-for="(i, y) in item.list" :key="y" @click="buttonClick(i)" > {{ i.name }} </span> <span v-show="item.stutas == 0" style="margin-left: 30px; color: red" >{{ item.title }}</span > </div> </div> </div> </div> </template> <script> export default { data() { return { isShow: 1, data: [ { stutas: 1, id: 1, name: "