均方误差期望 = 偏差 + 方差 + 噪音
偏差显示了,预估模型和“真实”函数 $f(x)$ 之间的数值差别。
方差显示了预估函数 $\hat{f}(x)$ 值与其均值的分散程度
https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
https://datawhalechina.github.io/pumpkin-book/#/chapter2/chapter2
均方误差期望 = 偏差 + 方差 + 噪音
偏差显示了,预估模型和“真实”函数 $f(x)$ 之间的数值差别。
方差显示了预估函数 $\hat{f}(x)$ 值与其均值的分散程度
https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
https://datawhalechina.github.io/pumpkin-book/#/chapter2/chapter2
19年初看到老莱频道剪辑师介绍的 Hasu u2u 转换器非常心动,可惜已售罄。
在geekhack上找到 Hasu 的帖子USB to USB keyboard converter build log,但完全不知道怎么制作。
这是第一次了解到 Hasu 和他的 TMK,后来在看Yang的HHKB蓝牙双模改装方案时发现也有 Hasu 的贡献。
20年8月看到50元成本自制转换器,正好ERGO88进展不顺,打算试试QMK换换心情。
结果是反复尝试进DFU
都失败,一度以为运气不好,买到的 Arduino pro micro 板子没法刷固件。
纠结半天,曾打算买ISP工具重新烧录bootloader,最后担心花费太多时间精力还是放弃了。
21年初完成ERGO88后,重买 pro micro,这次以防万一,买了16MHz-5V版本。
16MHz u2u运行正常,换到8MHz发现去年买的板子竟然烧录正常。
问题应该是出在第一次进DFU
上,尝试在插入USB前就短接,插入后放开再短接一次就能顺利进入。
如果买的是3.3V版本的pro micro,就不用再接U2
线性稳压元件
50元成本自制转换器 里面包板线序没有很清晰的标注出来,原理图参考 USB Host Shield Library, For Connecing Other USB Devices。
usb hub的外接设备供电,需要和板子断开,如图中红圈所示断开线路。
飞线shield的raw
针至图中箭头所示焊盘,使用 pro micro 的raw针为设备供电。
外接设备供电飞线,3.3V和RST针飞线。
线路参考: 在 Arduino Min (3.3V,8MHz) 上使用 Usb Host Shield Mini
旋转180度,层叠在一起。
右上第三针如果插接会短接VCC,这里我掰掉了 pro micro 的第三针GND脚。
解决好供电,晶振频率的问题可以通过固件适配。
8Mhz https://config.qmk.fm/#/converter/usb_usb/pro_micro/LAYOUT_all
16MHz https://config.qmk.fm/#/converter/usb_usb/hasu/LAYOUT_all
如果键盘是非标键盘,或是有宏定义的需求,可以自行编译。
https://github.com/qmk/qmk_firmware/tree/master/keyboards/converter/usb_usb
在 keymaps
下新增映射表,并编译
./bin/qmk compile -kb converter/usb_usb/pro_micro -km default
hex
固件文件RST
脚和GND
脚,进入bootloader,该状态会维持8秒。hex
固件文件,在DFU
状态点击烧录按钮,等待界面升级日志提示成功。RST
、GND
再连接电脑,放开再短接一次。在 Arduino Min (3.3V,8MHz) 上使用 Usb Host Shield Mini
我修我自己——Arduino充当ISP烧录器修复Arduino记录
【HIDuino】 — 超迷你的USB-HID开发板
https://www.arduino.cn/thread-6001-1-1.html
Arduino串口调试助手(2013.12.28更新)
https://1upkeyboards.com/shop/controllers/usb-to-usb-converter/
USB Host Shield Library, For Connecing Other USB Devices
USB to USB keyboard converter build log(Pro Micro 3.3v with mini host shield)
50元成本自制转换器——普通键盘变全键可编程键盘键盘什么值得买
【官方双语】打鸡血的键盘-Hasu USB到USB键盘控制器转换器#linus谈科技
1 | CREATE TABLE `test_a` ( |
1 | create procedure p_test_a(pa int(11)) |
生成数据call p_test_a(100000);
1 | set profiling=1; |
1 | ALTER TABLE `test_a` ADD INDEX `num_index` (`num`) ; |
再来对比 :distinct 和 group by
不管是加不加索引 group by 都比 distinct 快。
因此使用的时候建议选 group by
批量下载文件时,发现部分文件下载失败(大约10%)
手头上有原始文件地址、已下载文件名,需要找到下载失败的地址。
首先是找到的awk差集命令1
awk 'NR==FNR{ a[$1]=$1 } NR>FNR{ if(a[$1] == ""){ print $1}}' aaa.txt bbb.txt
思路是用数组存文件1
的行数据,再用文件2
搜是否存在
优点是效率高命令简洁,缺点是扩展麻烦,文件2
需要做预处理,要把地址里的文件名单独提取一列。
然后找到的是awk对比脚本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#/bin/bash
file1="aaa.txt"
file2="bbb.txt"
lines=`cat $file1 | wc -l` + 1
for ((i=1;i<=$lines;i++))
do
line1=`awk 'NR=='$i'{print $0}' $file1`
line2=`awk 'NR=='$i'{print $0}' $file2`
if [[ $line1 != $line2 ]]
then
echo "line $i is not equal"
fi
done
优点扩展性更好,缺点是每次循环都需要定位行,性能浪费严重。
基于B魔改了一个脚本:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#!/bin/bash
#文件地址
file1="aaa.txt"
#已下载文件名
file2="bbb.txt"
lines=`cat $file1 | wc -l`+1
for ((i=1;i<=$lines;i++))
do
#定位当前循环对比行
line1=`awk 'NR=='$i'{print $0}' $file1`
#摘出文件名
name=`echo $line1 | grep -ioP "(?<=/)[^/]*?(jpg|jpeg|bmp|gif|png)" `
#如果在已下载文件中不存在,则为下载失败文件
if [[ `grep $name $file2` == "" ]]
then
echo $line1
fi
done
性能非常捉急,1000多条数据跑了半个多小时。
awk那的优化估计比较难,进awk代码段里写逻辑的话参考方案A
。
grep那应该可以优化,用数组散列表来替换。
数据量较大的话还是方案A
比较理想,或者写代码来处理。
原文地址Count Bayesie
这篇文章是博客Count Bayesie 上 Will Kurt 的文章Kullback-Leibler Divergence Explained
的翻译和笔记
原文对 KL散度 的概念诠释得非常清晰易懂,评论区中有很多致谢,建议阅读
KL散度
是原始分布
中数据概率与近似分布
中数据概率的对数差
的期望
,用于量化参数化近似
代替观测分布
时丢失了多少信息。散度越小,说明模拟越逼近现实。
信息论奠基人香农认为“信息是用来消除随机不确定性的东西”,也就是以前不知道现在知道的事实。
熵
作为度量信息的期望,引用PRML
中的观点,信息量
可以看成是在了解事物时,感受到的“惊讶程度”。低概率事件内蕴的信息会比高概率的信息多,比如革命性产品问世、突破性科学发现。正所谓“无常生妖”,低概率事件有更多信息符合直觉。
多个事件同时发生的概率是多个事件概率相乘,总信息量是多个事件信息量相加。熵
计算公式中的对数不大好理解,参考严谨推导可以发现信息量
确实是$f(x)=-log{x}$。
概率和信息量的对数关系,可以理解为 两件事情信息量之和 = 两件事情同时发生的信息量:
$x_1$和$x_2$同时发生的概率:$P(x_1, x_2) = P(x_1)×P(x_2)$
$x_1$和$x_2$的总信息量:$log_2(P(x_1)P(x_2)) = log_2P(x_1)+log_2P(x_2)$
评论区中,作者有回复关于熵
的符号H
的提问:
谢谢你的评论,我不禁对这个符号的历史做了一些研究!如果你读过《通信的数学理论》(该书改编自香农为信息论奠定基础的原始论文 http://math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf )你会发现香农解释了H
的起源:
H
就是玻尔兹曼著名的H定理
中的H
。
有趣的是玻尔兹曼最初把它命名为E
,但后来他决定换成了H
,虽说对他是不是取了希腊字母Eta H
有些争议。
在玻尔兹曼关于熵的论文中,他使用了S
,而S
(不是E
)仍然是熵的标准物理符号。(维基百科中关于热力学第二定律的注释用了S
https://en.wikipedia.org/wiki/Second_law_of_thermodynamics)
KL散度的理解(GAN网络的优化)
KL散度的理解
Tutorial on Variational Autoencoders
不知为不知—信息论和最大熵原则
信息量为什么要表示成对数的形式
在这篇文章中,我们将研究一种比较两种概率分布的方法,即Kullback-Leibler散度(通常简称为KL散度)。在概率和统计中,我们经常用更简单的近似分布来代替观察到的数据或复杂分布。KL散度帮助我们测量当我们选择一个近似值时我们损失了多少信息。
Lotlab 开源固件,支持双模。
具体安装过程可参考 .travis.yml
SDCC
用于编译 CH554
GCC
用于编译 NRF52832
nrfutil
用于生成DFU包
1 | # 安装git make和sdcc编译工具。 |
最佳的期望是能拥有【LY092-MINI】布局的分体无线键盘,要有层功能、宏功能。
要能在保持尺寸不变、降低高度同时,有不错的可用性、可靠性,最好还能有不错的外观。
从淘宝找到闲鱼,再到zFrontier,各种客制化群,发现分体键盘是个较小众的产品品类。
分体键盘普遍都是有线键盘,无线分体键盘要么是左右有连线,要么是键位学习成本很高只能当玩具。
其中的2.4G接收器方案是个比较实用的方案,在稳定可靠上有优势,缺点是需要接收器没法用蓝牙、USB。
Github里的老哥收集了一堆分体,可惜没有能满足我需求的分体。
https://github.com/diimdeep/awesome-split-keyboards
这个站点也很不错,有很多小众键盘鼠标介绍。
http://xahlee.info/kbd/ergonomic_keyboards_index.html