深度学习入门-常用概率分布
一些简单的概率分布在机器学习中出现的频率非常高。下面是一些代表。
伯努利分布 Bernoulli distribution伯努利分布就是我们常见的0-1分布,它的随机变量是离散的,而且只能取0和1。假设$\phi$是取到1的概率。那么伯努利分布具备的性质可以描述成以下的等式:
$P(\textrm{x}=1)=\phi$
$P(\textrm{x}=0)=1-\phi$
$P(\textrm{x}=x)=\phi^x(1-\phi)^{1-x}$
$\mathbb{E}_\textrm{x}[\textrm{x}]=\phi$
$Var_\textrm{x}[\textrm{x}]=\phi(1-\phi)$
多项分布 Multinoulli distribution多项分布也叫范畴分布,他是伯努利分布的一般化推广。如果你在做一个试验,它的结果要么成功要么失败,那么它就是一个伯努利分布。但是考虑这个试验的结果可能取到N个值。那每次试验的结果就可以记为一个N维的向量,只有此次试验的结果对应的维度记为1,其 ...
深度学习入门-概率论基础
概率论是深度学习最核心的数学工具之一。本文是涉深度学习的概率论方面知识的回顾。
为什么要使用概率深度学习有别于传统的计算机场景,是在未能完全观测或不具备全部信息的前提下去猜测答案。当精确会带来复杂的时候,简单但是可能不确定有时候更有用。
但事实上机器学习领域的概率有别于我们在大学里学到的数学概率。之前我们理解的概率是事件重复发生足够多次的时候,某个结果出现的比例。但在机器学习领域,比如说去预测一个患者罹患肺炎的概率,这个时候你无法让同一个患者重复足够多次得到最终确诊为肺炎的比例。这个时候所说的概率应该称之为信任度。1那么肯定是肺炎,0肯定不是肺炎。所以之前的概率可称为频率派概率,后者称为贝叶斯概率。
所以对机器学习来说,概率论是一套工具:可以在给定一套命题的似然后,计算其他命题为真的似然。
随机变量随机变量$\textrm{x}$是可以随机取不同值的变量。$x_1$,$x_2$就是他可能取到的值。如果随机变量是向量,那么可以记为$\bf x$。
概率分布概率分布是指随机变量$x$取到某个状态值$x_1$的可能性大小。对于离散随机变量和连续随机变量有不同的描述方式。
离散型随机变量和 ...
SQL Server 增量同步方案探索
这是我早期写的一篇文章,搬运过来归档。现在增量同步已经有了发布订阅、alwayson、cdc等多种选择。
1. 背景SQL Server增量同步是数据中心建设的一个关键点。可用的方案方剑总在[大话数据库增量备份]一文中有过系统的总结。本次讨论过程中我提出了一个新的方案,即基于SQL Server LDF 日志的增量同步。端午节期间针对这个方案及其他几个可尝试的方案进行了探索。
2.基于SQL Server LDF日志抓取增量内容并同步的方案探索2.1 核心思路使用fn_dblog函数获取事务日志,解析日志,抓取在特定表上的INSERT,UPDATE,DELETE操作,将事务在同步库中重现
2.2 步骤# fn_dblog是一个未被官方文档记载的内置函数,官方不建议常规用户使用,他的使用方法没有系统介绍,必须依赖官方博客的只言片语,以及前人的探索。SELECT * FROM fn_dblog(NULL, NULL) # 参数是时间范围# 观看返回值,发现很多无关的日志内容,然后发现有AllocUnitId字段,查阅有关资料得知这是数据库对象的实例ID,这个实例ID不是一成不变的,会伴 ...
事务复制对SQLServer的影响
它使用SQL代理日志读取器作业来从发布数据库的事务日志中收集已提交的事务。这意味着在日志记录被读取之前不能清除日志。如果日志读取器代理出现问题,则日志可能意外增长。在大量的OLTP操作时,日志读取器代理的读和业务的写可能产生争用,这取决于你的IO的性能。
复制第一次初始化或者长时间停用后,再启用,会传输过多的事务日志,第一次生成快照时,会锁表。在此期间数据库会表现出响应延迟(其实还是日志瓶颈)。建议停用超过6小时,则使用最新备份还原到复制库后再进行同步。
连续运行代理的性能开销小于频繁调度
在分发服务器上 设置 –MaxCmdsInTran 能提高事务复制的性能,–SubscriptionStreams 能提高复制的吞吐量, -CommitBatchSize用于设置分发服务器上一次提交行数,网络越不靠谱,这个值就需要设置的越小,但越小则分发服务器上的开销越大。
发布服务器上的**-ReadBatchSize**参数用于指定一次读取的事务数量,默认是500个,如果复制的表较多,则这个值要设小一点,如果复制的表较少,则这个值要设大一点。(即,有效日志是不是稀疏的)
发布服务器 ...
jupyter自动代码补全
jupyter notebook 用来写python代码蛮舒服的,唯一的缺点就是代码提示需要主动按tab键,跟pycharm比起来太累了。幸好通过插件Hinterland能解决这个问题,下面是具体的步骤。
操作步骤
进入命令行环境。我使用的是conda。有两种方式进入命令行。
方法1:通过anconda navigator界面,选择environments,选择对应环境名,选择open terminal
方法2:直接使用cmd或者terminal等终端进入命令行。激活你想要配置代码补全的环境(如果是默认环境不用激活)
# 假设环境名为 tensorflow# linux激活环境 source activate tensorflow# windows 激活环境activate tensorflow
安装nbextensions
pip install jupyter_contrib_nbextensionsjupyter contrib nbextension install --user
安装nbextensions_configurator
pip install ju ...
JPA调用SQL Server存储过程获得返回值
SQL Server的存储过程返回值的方式跟Oracle有蛮大的区别,想通过JPA去获取存储过程的返回值,需要特殊的实现。代码如下。
@Autowiredprivate EntityManager entityManager; ... ....StoredProcedureQuery query = entityManager .createStoredProcedureQuery("USP_GET_SJJ") .registerStoredProcedureParameter("jktablename", String.class, ParameterMode.IN) .registerStoredProcedureParameter("xhstr", String.class, ParameterMode.IN) .registerStoredProcedureParameter("retu ...
使用私有gitlab搭建gitbook持续集成
gitbook是一套文档/书籍很好的解决方案,我这里用他来发布团队的一些公有规范。gitlab是我们在用的一套git私仓。以下是具体的操作步骤。
安装node.jswget https://nodejs.org/dist/latest-v6.x/node-v6.12.3.tar.gztar -xf node-v6.12.3.tar.gzcd node-v6.12.3./configuresudo makesudo make install
安装gitbook-clisudo npm install -g gitbook-cli
创建git project 并注册cli直接在gitlab中创建一个project,然后进入project的settings界面CI/CD settings下的Runners settings界面找到注册令牌。如果没安装过gitlab runner,还需要先安装gitlab runner,可以参照我之前的一篇文章中的第三步,第四步。然后为该project注册cli
sudo gitlab-runner register
这里需要注 ...
解决utf8的xml中文乱码问题
如果编码格式不是utf8,中文乱码我也认了。这次遇到了上传的utf8编码的xml文档,通过java上传处理后,出现了中文乱码。经过团队的小伙伴仔细调试后发现是utf8 bom的锅。既然utf8 bom会导致兼容性问题,那我只能去把这个bom头去掉了。以下是处理代码。
public class UTF8Handle { private static final byte[] UTF8_BOM_BYTES = new byte[] {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF }; private UTF8Handle(){} static public String removeUTF8BOM(String xmlText) { byte[] bytes = xmlText.getBytes(); boolean containsBOM = bytes.length > 3 && by ...
使用Docker构建SQL Server开发数据库
我习惯在Linux下开发,但目前的产品采用的是SQL Server,众所周知,MSSQL在Linux下臃肿笨重,故决定使用Docker搭建SQL Server Express作为开发数据库。以下是具体过程。
拉取镜像并启动实例image还是非常大的,再拉取之前一定要先添加加速器,否则会等到天荒地老。如果添加加速器,请参见我的另一篇文章
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=your_password' -e 'MSSQL_PID=Express' -p 1433:1433 --name mssql -v mssql_db:/data/db --privileged=true -d microsoft/mssql-server-linux:latest
ACCEPT_EULA=Y 接受用户协议
SA_PASSWORD=your_password设置sa的密码,这个密码必须是高强度密码,有数字大小写字母,不小于8位
MSSQL_PID=ExpressSQL Serve ...
解决response中文乱码问题
今天遇到一个中文乱码问题:在spring boot的框架中从数据库获取一个xml-string返回给前台,中文乱码。以下是解决办法:
response.setHeader("Content-type", "text/html;charset=UTF-8"); String data = "中文字符"; OutputStream outputStream = response.getOutputStream(); outputStream.write(data.getBytes("UTF-8"));
