将Hexo博客到同时部署到Github和Coding实现全球快速访问。

coding.net采用https
github pages怎样采用https呢?

简介

多线,指多条解析线路(isp)。

如果访问量特别大,可以多线部署,比如分别部署电信、网通等多条线路,或者不同省份的线路。这里我们仅采用国内线路、海外线路两种。

一个主机头可以分别解析不同的线路、不同IP,当用户访问网站的时候,智能DNS会判断出他们的线路并解析给他们对应线路的IP,以达到最快的访问速度

配置hexo的_config文件

这样在执行hexo deploy命令时就会同时部署到github和coding,由于之前已经配置了ssh,所以这里并不需要输密码 非常方便。

DNS解析的配置

主要配置:

1
2
3
记录类型  解析线路(isp)  记录值
CNAME 世界 xu-song.github.io # 海外线路采用github page
CNAME 默认 xu-song.coding.me # 国内线路采用coding page

在coding和github绑定自己的域名

如何测试

方式一:http://tool.chinaz.com/dns/
可测试 DNS 服务器的可用性和响应时间

美国、香港、台湾已经是解析的github的地址,国内的dns解析的是coding的地址。

方式二:http://ce.cloud.360.cn/

方式三:

1
2
3
4
5
6
7
chrome://dns/
查看DNS解析的地址

chrome://net-internals/#dns
更多功能请参考

chrome://chrome-urls/

问题

以上方式,github的

双线部署方案

方案列表:

  1. Github + Coding + DNS双线解析。简单,但github不能对独立域名配置HTTPS
  2. Github + CloudFlare + Coding + DNS双线解析。实现双线部署,双线HTTPS

如何对js image等资源设置多线CDN?

比如有些google的js国内访问不到,需要采用国内的镜像CDN资源。

另外,图片、js、css等静态文件可以使用CDN加速,一些公共的js、css可以使用一些公共CDN,比如百度CDN,其余资源可以上传到七牛云来加速。

如何在html页面动态显示连接线路?

根据访问的路线,动态显示Hosted by Coding Pages 或者 Github Pages。

dns解析过程在页面解析之前。。前端无法获取到这个信息。

Update

为了双线部署,且启用 SSL 。当前版本采用了

  • 国内线路:万网NDS + Coding_Pages(提供Lets’ Encrypt免费SSL证书)
  • 境外线路:万网DNS + CloudFlare_Name_Server(提供CDN+CloudFlare免费SSL证书) + Github_Pages

DNS解析实例之 Coding Pages

coding page跳转至首页

DNS配置

coding.net域名配置

首选域名,一次到达

1
2
3
4
5
6
7
8
$ wget https://blog.eson.org
# 这个不需要重定向
--2018-03-02 18:51:26-- https://blog.eson.org/
Resolving blog.eson.org (blog.eson.org)... 107.150.121.91, 107.150.121.231, 103.72.147.89, ...
Connecting to blog.eson.org (blog.eson.org)|107.150.121.91|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72536 (71K) [text/html]
Saving to: ‘index.html.1’

跳转至首页的域名,采用301跳转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ wget xusong.vip
--2018-03-02 17:35:28-- http://xusong.vip/
# dns解析xusong.vip,根据CNAME记录得到xu-song.coding.me。
# 然后解析xu-song.coding.me对应的服务器IP。
# 返回“301跳转到 http://blog.eson.org/”
Resolving xusong.vip (xusong.vip)... 103.72.145.7, 23.91.101.50, 103.218.240.147, ...
Connecting to xusong.vip (xusong.vip)|103.72.145.7|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://blog.eson.org/ [following]
# DNS解析http站点,返回“301跳转至https页面”
--2018-03-02 17:35:29-- http://blog.eson.org/
Resolving blog.eson.org (blog.eson.org)... 103.72.147.211, 103.72.145.7, 23.91.101.50, ...
Reusing existing connection to xusong.vip:80.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://blog.eson.org/ [following]
# DNS解析https站点,返回页面内容
--2018-03-02 17:35:31-- https://blog.eson.org/
Connecting to blog.eson.org (blog.eson.org)|103.72.147.211|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72536 (71K) [text/html]
Saving to: ‘index.html’

不加https协议,会首先301跳转到https站点。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ wget blog.eson.org
# 默认是访问 http://blog.eson.org,返回301重定向 https://blog.eson.org/
--2018-03-02 18:50:27-- http://blog.eson.org/
Resolving blog.eson.org (blog.eson.org)... 36.255.221.66, 107.150.121.91, 107.150.121.231, ...
Connecting to blog.eson.org (blog.eson.org)|36.255.221.66|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://blog.eson.org/ [following]
#
--2018-03-02 18:50:28-- https://blog.eson.org/
Connecting to blog.eson.org (blog.eson.org)|36.255.221.66|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72536 (71K) [text/html]
Saving to: ‘index.html’

直接访问coding pages页面,要跳转2次,一次302,一次301

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ wget xu-song.coding.me
#
--2018-03-02 18:58:45-- http://xu-song.coding.me/
Resolving xu-song.coding.me (xu-song.coding.me)... 23.91.97.251, 103.218.241.74, 103.72.147.211, ...
Connecting to xu-song.coding.me (xu-song.coding.me)|23.91.97.251|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://blog.eson.org/ [following]
#
--2018-03-02 18:58:46-- http://blog.eson.org/
Resolving blog.eson.org (blog.eson.org)... 103.72.147.211, 103.72.145.7, 23.91.101.50, ...
Reusing existing connection to xu-song.coding.me:80.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://blog.eson.org/ [following]
#
--2018-03-02 18:58:46-- https://blog.eson.org/
Connecting to blog.eson.org (blog.eson.org)|103.72.147.211|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 72536 (71K) [text/html]
Saving to: ‘index.html.3’

metric 距离度量

什么时候采用均方差,什么时候采用cross entropy?

连个任意向量的距离

L1 L2

L2距离,更改坐标系,距离不变。
L1距离,更改坐标系,距离会变。coordinate dependency

有特殊意义的,可以用L1. 没有特殊意义的向量,最好用L2。

http://vision.stanford.edu/teaching/cs231n-demos/knn/

两个概率的距离

  • cross entropy
  • kl divergence
  • word mover distance
    • WMD for document distance
    • Wasserstein GAN (W-GAN)
      -

【机器学习系列】特征工程

简介

there’re now hundreds or perhaps thousands of researchers who’ve spent years of their
lives slowly and laboriously hand-engineering vision, audio or text features. While much of this feature-engineering work is extremely clever, one has to wonder if we can do better. Certainly this labor-intensive hand-engineering approach does not scale well to new problems; further, ideally we’d like to have algorithms that can automatically learn even better feature representations than the hand-engineered ones. – 来自ufldl

特征类别

离散特征

连续特征 (continuous features)

Bucketization turns a continuous column into a categorical column. This transformation lets you use continuous features in feature crosses, or learn cases where specific value ranges have particular importance.

Bucketization

1
2
age_buckets = tf.feature_column.bucketized_column(
age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])

为什么要Bucketization?

类别特征 Categorical features

  • 文本中的word

    图像中的像素点,不是。因为具有大小有意义。

通常被转化为稀疏向量。(比如FM中对user_id的处理,NLP中的one-hot表达,)

比如
‘eye_color’的’brown’表示为[1, 0, 0], ‘blue’ 表示为[0, 1, 0] and ‘green’表示为[0, 0, 1].

称之为稀疏向量,因为多数情况下向量维度高,仅只有一个非零值。

为什么不用一个点表示?比如表示成 1 2 3?这样只占用一个维度。

典型的特征处理方法

  • one-hot处理
  • 还有hash-bucket处理

挑战

  1. 未知的类别
    • 可采用categorical_column_with_hash_bucket()
  2. ss

特征工程

Base Feature Column

通常原始特征表达能力不够,通常大家会在原始特征的基础上人工设计一些特征。特征设计的好坏对整个系统至关重要。设计的好,效果好,外接简单的分类器或其他模型就能够取得较好的效果。因此工业界很青睐这种方法。

Feature Crosses

组合特征,这仅仅适用于sparser特征.产生的依然是sparsor特征

1
2
sport_x_city = tf.feature_column.crossed_column(
["sport", "city"], hash_bucket_size=int(1e4))

###

挑战 & 缺陷

  1. 特征工程

特征选择

参考

  • Wide & Deep Learning Tutorial | TensorFlow | code
    • 浅层模型(比如LR)要提高效果,一般会提前大量的人工特征,即wide模型
    • DNN一般采用end-to-end的模型,建立原始特征-->label的映射。
    • wide & deep则是结合两者的有点。

Hexo中的SEO技巧

关于keywords

为每个post添加tag,因为tag会被放入页面的keywords

1
2
3
4
5

{% if page.keywords %}
<meta name="keywords" content="{{ page.keywords }}" />
{% elif page.tags and page.tags.length %}
<meta name="keywords" content="{% for tag in page.tags %}{{ tag.name }},{% endfor %}" />

每个页面 keywords 的选择顺序,是按照如下优先顺序进行

  1. page 中定义的 keywords
  2. page 中定义的 tags
  3. _config.yml 中定义的 keywords (hexo中定义的keyword,不是theme的config)

源码
https://github.com/hexojs/hexo/blob/master/lib/plugins/helper/open_graph.js

https://github.com/theme-next/hexo-theme-next/blob/master/layout/_partials/head/head-unique.swig

建议tags标签和keywords标签都加。由于keywords在页面不会展示,因此添加更自由,添加面向SEO的标签。

关于robots.txt 和 sitemap.xml

参考

http://www.restran.net/2017/05/02/hexo-custom-html-meta-keywords/

广义线性模型

logistic regression

逻辑回归

= 最小二乘法。

最小二乘法(Least squares)的线性回归中,我们的目标方程

ridge regression

岭回归

二范数 L2正则

相当于对参数加高斯先验

L1正则

相当于对参数加拉普拉斯先验。

SSL证书

为什么要用HTTPS?

HTTP 协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的 HTTP 的网站是不太安全的。所以, Google 的 Chrome 浏览器将在 2017 年 1 月开始,标记使用不加密的 HTTP 协议的网站为 Not Secure,不安全。

HTTPS 会为您的网站建立加密的信息安全通道,保证数据传输的安全,防止传输内容被第三方冒充或篡改。

部署 HTTPS 网站的时候需要证书,证书由 CA 机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。

证书的类型

SSL证书没有所谓的“品质”和“等级”之分,只有三种不同的类型。SSL证书需要向国际公认的证书证书认证机构(简称CA,Certificate Authority)申请。CA机构颁发的证书有3种类型:

  • 域名型SSL证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
  • 企业型SSL证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
  • 增强型SSL证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。

SSL证书的颁发机构 - CA机构

  • Let’s Encrypt: Let’s Encrypt 是目前使用范围最为广泛的免费 SSL 证书,而且官方博客宣布,自 2018 年开始提供通配符 SSL 证书,也就是 wildcard certificates。
  • Symantec
  • GeoTrust
  • TrustAsia 亚信
  • AlwaysOnSSL
  • Comodo
  • Cloudflare: Cloudflare 很早就开始提供免费 SSL 证书,前提是你的域名要放在 Cloudflare 解析,注册为 Free Plan 就可以。

自从 Let’s encrypt 开始提供免费DV SSL后,SSL 证书市场就已经开始洗牌了。

1
2
Issued by: Encryption Everywhere DV TLS CA - G1
Issued by: Let's Encrypt Authority X3

第三方机构 - 辅助申请证书

阿里云
阿里云提供免费DV SSL证书

  • Symantec 免费版 单域名证书 - 免费
  • GeoTrust 通配符DV SSL证书 - 收费

又拍云 免费提供 Let’s Encrypt 和 Symantec 签发的两款 DV SSL 证书,也是业内唯一一家提供两种。立即签署颁发,并实现了Let’s Encrypt 自动续期功能。

腾讯的就是方便,不过时间只有一年。

cloudflare 免费版并不是很快。而且他强制你 nameserver 指过去(可把域名解析都托管过去,也可只托管指定主机)

coding.net coding pages会自动给证书续期

注意:申请 SSL/TLS 证书需要通过 Let’s Encrypt 的 HTTP 方式验证域名所有权。如果您的域名在境外无法访问 Coding Pages 的服务器,将导致 SSL/TLS 证书申请失败。

Let’s Encrypt证书

SSL 证书服务,大家用哪家的?

  • Let’s Encrypt:免费,快捷,支持多域名,三条命令即时签署+导出证书。缺点是暂时
  • 2018年3月14日,Let’s Encrypt 对外宣布 ACME v2 已正式支持通配符证书

Let’s encrypt 的免费证书默认有效期为 90 天,到期后如果要续期可以执行:

1
certbot-auto renew

操作流程

要使用 HTTPS,你需要安全机构颁发的安全证书,然后配置服务器,去使用这个证书。下面介绍一下在阿里云免费申请安全证书,还有配置一般的 NGINX 服务器支持 HTTPS 的方法。

  1. 申请证书、绑定域名
  2. 下载证书
  3. 使用证书: 配置 相应的Web服务器

github pages如何使用SSL证书?

虽然 Github 早在2016年就已经为 *.github.io 添加了 HTTPS 支持,但自定义域名开启 HTTPS 却是一件令人头疼的事情。大家只能使用 Cloudflare 之类的支持 SSL 的 CDN 曲线支持 HTTPS 。

好消息: 2018年5月1日,GitHub 宣布与 Let’s Encrypt 合作,为 Github Pages 自定义域名提供官方的HTTPS 支持。如果在 Github Pages 绑定了域名,现在可以使用 Let’s Encrypt 签发的 SSL 证书为绑定的域名开启 HTTPS 访问。

如果 enforce HTTPS 不可勾选,并且提示 Not yet available for your site because the certificate has not finished being issued ,说明证书尚未申请完成,等待一天即可。

github pages采用的github的服务器,不能直接设置https,但可以通过CDN来设置SSL

  • github_pages + cloudflare(cdn+https)
  • gitpage + 又拍云(cdn,https)

又拍云需要域名备案

cloudflare

配置CDN流程

  1. 进入万网控制台
  2. 修改dns服务器,默认dns服务器 dns1.hichina.com,dns2.hichina.com,修改成cloudflare的dns服务器

To use Cloudflare, you need to change your domain’s authoritative DNS servers, which are also referred to as nameservers.

用 cloudflare,但是他要我更换 dns 服务器,更换后貌似导致域名访问不了 coding pages 的服务器了。原因是cloudflare接管DNS解析后,不支持双线部署。

设置https

  • 在CF的Crypto页中,SSL设置为Flexible。这将允许CDN到github pages之间的访问为http。
  • 现在,通过https://你的域名已经可以访问站点首页了。

强制https

CF提供Page Rules功能,可设置路由规则。通过规则中的Always use https选项,可以将用户强制跳转到https

参考 https://blog.chionlab.moe/2016/01/28/github-pages-with-https/

证书信息

1
2
网站: blog.eson.org
颁发给: sni90514.cloudflaressl.com # 这个是

原理

它的原理是当访客使用 HTTPS 访问站点的时候,

  1. 从访客到 Cloudflare
  2. 然后从 Cloudflare 到站点这段是明文的

s

虽然不是全程加密,假设从 Cloudflare 到站点的信道相对可靠的话,也能很大程度上解决中间人劫持的问题。

  • 更改DNS服务器。这样万网域名eson.org中的所有配置失效,转由cloudflare提供DNS解析服务。
    • 但是cloudflare没有线路配置,也就没必要双线部署了
  • DNS导向到github page之前,进行了缓存。

扩展阅读

  • 关于免费SSL证书的那些事儿 | 知乎

【深度学习】深度学习框架总结

基本介绍

库名 主语言 从语言 速度 灵活性 文档 适合模型 平台 上手难易 开发者 模式
Tensorflo C++ cuda/python/Matlab/Ruby/R 中等 中等 CNN/RNN Linux,OSX Google 分布式/声明式
Caffe C++ cuda/python/Matlab 一般 全面 CNN 所有系统 中等 贾杨清,后入坑Facebook 声明式
PyTorch python C/C++ 中等 中等 - 中等 FaceBook
MXNet c++ cuda/R/julia 全面 CNN 所有系统 中等 李沐和陈天奇等,后来入坑Amazon 分布式/声明式/命令式
Torch lua C/cuda 全面 CNN/RNN Linux,OSX 中等 Facebook 命令式
Theano python c++/cuda 中等 中等 CNN/RNN Linux, OSX 蒙特利尔理工学院 命令式

Caffe2代码全部并入PyTorch:深度学习框架格局剧震

ss

tool year download feature example code pretrained_model state of art 备注
caffe
theano
tensorflow
torch
DL4j 容易与Kafka、Hadoop和Spark集成

api 对比

tensorflowpytorchpytorch 0.4theanokerasMXNet
核心类是 autograd.VariableVariables并入Tensor,核心类是torch.Tensor
数据data类型torch.FloatTensor, torch.DoubleTensor等类型torch.Tensor
创建torch.from_numpy(a) 等torch.ones(1)
输入数据x类型tf.placeholder (占位符)

torch.autograd.variable.Variabletorch.Tensor
创建torch.autograd.Variable(value)torch.ones(1)
简介运行时赋值(Session.run 的 feed_dict)声明时赋值。variable是tensor的容器,增加了自动求梯度的功能。variables wrap tensors, and construct a chain of operations between the tensors, so that the gradients can flow back.它的创建与data相同。是否加入graph取决于运算中是否有requires_grad=True节点
变量variable类型tf.variabletorch.autograd.variable.Variabletorch.Tensor
创建torch.autograd.Variable(value, requires_grad=True)x = torch.ones(2, 2, requires_grad=True)
简介模型参数。 声明时须提供初始值.训练时值会改变
评价placeholder的必要性?优势:data与variable分离。缺陷,tensor和variable不能直接计算。因为前者非graph,后者要加到graph。默认
优化器
查看变量值sess = tf.InteractiveSession() <br>
raw_data.eval()
tf.scan可用普通的imperative flow control
tf.constant放哪torch.tensor放哪?
这些都是符号包含数据的变量

核心: tensor variable

tensor

  • 不能改变的tensor,tf.constant不能被assign
  • 能够改变的tensor,

variable

  • tensorflow新版,推荐不采用tf.Variable,而是采用tf.get_Variable. 我觉得是一个挺合理的变化。因为tf.Variable自身是operation,容易与tf.variable的tensor混淆。

FAQ

  1. pytorch中tensor和variable为什么要合并?tf中为什么不合并?
  2. 什么情况下维度用?表示?只有符号编程需要这样做吗?
  3. tf.Variable(0.0, trainable=False)与tf.constant的区别?前者的应用场景是什么?

PyTorch 0.4:年度最大更新!完全改变API
Combine Variable and Tensor APIs (Perform autograd directly on torch.Tensor) | github

1
2
Q: 新的pytorch没有了variable类,以前的很多code是不是都不能用了
A: 不用,只有用户显示调用的variable会不能用了,之前很多采用的是内置参数,比如 nn.Embedding nn.GRU

0.4以前,tf.Tensor是数据,tf.Variable是变量。数据不能够进行计算,需要转化成variable。variable是对tensor的封装,额外包含了梯度、graph信息。比如 requires_grad=True 是variable的专利。0.4之后,合并tensor与variable,可在tensor中设置requires_grad=True。

取消所有对variable的变量名,统统改称为tensor

tensor to numpyArray

  • tensorflow
    • tf.eval 或 session.run。需要依赖
  • pytorch
    • torch.from_numpy(a) 方便

类似的东东
tf - tf.variable是tf.tensor的封装
pytorch - autograd.Variable是tensor的封装

ONNX

性能Caffe> TensorFlow和Torch

上升趋势:MXNet(Amazon主推) > PyTorch(Facebook主推) > TF & Keras

速度:
pytorch想要写的快也需要了解自动求导等原理,没写好一定慢。tf没写好也会慢
PyTorch多清爽 (tf的session,graph很烦)
MXNet多快。
底层都是C++,为什么tf的python这么丑?

为什么keras不支持MXNet?不支持PyTorch?

TF

pros

  • 与Theano类似的计算图抽象化
  • 编译时间快于Theano
  • 用TensorBoard进行可视化 (pytorch和MXNet也有可视化了,这个不算优势了)
  • 同时支持数据并行和模型并行
  • 生态好,分布式,serving,

cons

  • control dependency反人类(不理解)
  • 写动态结构麻烦(不理解)
  • 目前TensorFlow还不支持所谓的“内联(inline)”矩阵运算,必须要复制矩阵才能对其进行运算。复制非常大的矩阵会导致成本全面偏高。TF运行所需的时间是最新深度学习工具的四倍。谷歌表示正在解决这一问题。
  • 速度慢(例如:CNTK 和 MxNet). 为什么???
  • TensorFlow不提供商业支持。而谷歌也不太可能会从事支持开源企业软件的业务。谷歌的角色是为研究者提供一种新工具。
  • 和Theano一样,TensforFlow会生成计算图(如一系列矩阵运算,例如z = sigmoid(x),其中x和z均为矩阵),自动求导。自动求导很重要,否则每尝试一种新的神经网络设计就要手动编写新的反向传播算法,没人愿意这样做。在谷歌的生态系统中,这些计算图会被谷歌大脑用于高强度计算,但谷歌还没有开放相关工具的源代码。TensorFlow可以算是谷歌内部深度学习解决方案的一半。
  • 加载每个新的训练批次时都要跳至Python
  • 动态类型在大型软件项目中容易出错
  • 速度慢,有争议
  • 比Torch笨重许多;更难理解
  • tensorflow是符号式编程方式,继承了theano一大堆缺点,不仅写法麻烦,而且bug难调;
  • 作为静态图框架,调试困难。有个tfdbg的工具可以调试。
  • tensorflow_Fold的“动态”是指dynamic batching,并非pytorch的“动态”

疑问

  • 按道理静态图适宜部署,运行应该比动态图快啊。比pytorch快吗?为什么比MXNet慢呢?

caffe – deprecated

适合前馈网络和图像处理

pros

  • 适合前馈网络和图像处理
  • 适合微调已有的网络
  • 无需编写任何代码即可训练模型
  • Python接口相当有用

cons

  • 需要用C++ / CUDA编写新的GPU层
  • 不适合循环网络,不适用于文本、声音或时间序列数据等其他类型的深度学习应用
  • 用于大型网络(GoogLeNet、ResNet)时过于繁琐
  • 不可扩展,有些不够精简
  • 不提供商业支持
  • 更新缓慢,以后不再更新

caffe2 – 没文档 by 贾扬清

Caffe2将接替原版Caffe,与Caffe和PyTorch一样,Caffe2提供一个在C++引擎上运行的Python API。

不提供商业支持

pytorch

  • 命令式编程的方式,随时能够运行结果,容易定位bug
  • 支持动态图,非常灵活,能够随意取出其中的tensor进行操作和查看;
  • 最新的cs231n都推出了PyTorch版本的作业

  • 其实PyTorch也是仿照Chainer开发的,其后端也是调用的torch的运算,定位比keras低,但是又比tensorflow高。

  • PyTorch定位于科研,在Facebook内部使用Caffe2作为产品的部署和应用
  • pytorch更容易重构函数,但是如果需要部署的话就还是得像TF或者其他一些框架一样老老实实做dirty work。

CNTK

Chainer

DyNet

DyNet亦称动态神经网络工具包,由卡纳基梅隆大学推出,过去曾被称为cnn。它最值得一提的功能就是动态计算图,能够处理可变长度的输入,很适合自然语言分析。PyTorch和Chainer也提供同样的功能。

  • 动态计算图
  • 用户群较小

keras

Keras 是一个基于Theano和TensorFlow的深度学习库,具有一个受Torch启发、较为直观的API。这可能是目前最好的Python API。Deeplearning4j可以导入Keras模型。Keras是由谷歌软件工程师Francois Chollet开发的。

  • 受Torch启发的直观API
  • 可使用Theano、TensorFlow和Deeplearning4j后端(即将推出CNTK后端)
  • 该框架正快速成长
  • 有可能成为用于开发神经网络的标准Python API
  • 不用keras的原因主要是不能像TensorFlow一样自己定义输入输出,只能add layer,不太好构造结构独特的网络。

    MxNet

  • 结合了神经网络几何的象征性声明与张量操作的命令性编程
  • 允许混合符号和命令式编程风格。
  • MXNet平台是建立在一个动态依赖调度器上的,它可以自动并行化符号和命令式操作
  • 在许多方面MXNet类似于TensorFlow,但增加了嵌入命令张量操作的能力。
  • MXnet速度快,省显存,并行效率高,分布式简单
  • 动态图接口Gluon。MXNet正是看到了以PyTorch为首的命令式编程框架的潜力,对于新用户特别友好,易于上手,所以他们决定模仿PyTorch开发一个动态图接口Gluon
  • Gluon也可以看作一个接口,调用底层的MXNet,但是前端使用符号式编程的方式。
  • Gluon不仅定位于科研,同时也可用于产品
  • PyTorch只有动态图的模式,有的时候我们的网络结构其实是一个静态图,但是通过PyTorch每次都会重新构建动态图,而Gluon提供了一个静态图和动态图之间切换的方式
  • 使用者可以先用imperatvie的方式写网络,debug,最后跑通网络之后,如果网络是一个静态图结构,就可以用net.hybridize()的方式将其转换成静态图,众所周知静态图的运算会比动态图快,

Paddle

如何评价余凯在朋友圈发表呼吁大家用caffe, mxnet等框架,避免tf

  1. 假设有一天Google为了卖它的TPU,决定渐渐放弃GPU支持,你说nVidia会不会慌?
  2. 假设Google说要把放弃x86和Xeon Phi支持,你说Intel慌不慌?
  3. Google拒绝针对以太网(AWS和Windows Azure都是万兆以太网)做任何优化,而且不愿意merge任何与此相关的PR,你说Amazon和Microsoft慌不慌?
  4. 假设有一家做TPU(比如寒武纪),或者做无人车的公司,对Google造成了严重威胁,那么他们发的PR,能不能保证得到Google的公正对待?

NVidia笑了。这几个框架跑分全靠cuDNN,就算不用cuDNN,也是要用CUDA的。深度学习就是NVidia的私家花园。TensorFlow能垄断啥?

NVIDIA 搞生态(???),是指支持很多框架吗?

发展史 段子


我曾经做过一段时间的图像算法工程师,主要工作就是看论文、实践论文中的各种算法以及优化算法以适应自己的工程问题。当时的主要工程问题就是做人脸检测、图像识别和图像搜索等等,其中比较考验水平和依赖经验的部分是选择Feature和优化Feature以适应具体的工程问题。对于当时的一些通用的Feature,比如SURF/SIFT(这两个基本是划时代的)、LBP或者MSER等等,不仅是需要了解其使用场景及各种局限,而且最好能够很清楚其理论基础和推导过程,这样才能便于优化和适应。
大概在2013年左右,了解到Deep Learning崛起的趋势,然后阅读了相关教程。当时的第一个反应就是WTF,难怪有人将DL列为“知其然而不知其所以然”的科学技术之前几名。第二个反应就是,选择和优化Feature这一步岂不是被完全替代了。紧接着Caffe、TensorFlow以及各种DL的Library接踵而出,搞DL的门槛被拉得越来越低。这不得不让人想起来在OpenCV中实现人脸检测就只需要一两行代码,使用的人完全不用考虑Adaboost以及Haar等数学问题。


我大概13年的时候听说有深度学习这回事,然后跟着UFLDL学习了如何推导矩阵导数,练习了一些常见层的推导和代码编写。后来出了caffe,因为当时在外地出差,搬砖之余就看了不少caffe的代码,慢慢地就开始在caffe上写layer,前向cpu、后向cpu、前向gpu、后向gpu,一共4份代码。为了写一个layer,需要学会推导矩阵求导的公式(我研究生时期才学到相关知识),要会写c++,会使用BLAS(一个矩阵运算的库,参数非常繁复,每次都要看半天文档才能写出一个函数),还要会写GPU上运行的CUDA代码。如果是一名编程基础不是很好的研究生,可能到了研二结束都写不出一个layer。还好,当时我是个编程基础还不错的研究生,上手还不算很困难。然而当我刚刚能够熟练写layer的时候,深度学习的各种library如雨后春笋般一个个冒出来了,各个都有自动求导、cpu gpu代码自动转换的功能!这意味着不需要推导公式,不需要会BLAS,不需要会CUDA,只需要写1份前向代码,而其他所有工作都由library自动完成!一开始我并没有在意,后来实现neural style(就是之前很火的Prisma用的方法:免费摄影APP“Prisma”将照片变成名画)的时候我花了2天时间写了个gram layer并完成测试后,赫然看到别人用torch几行就写出来了,顿时目瞪口呆:function gram(input) local k = input:size(2) local flat = input:view(k, -1) local gram = torch.mm(flat, flat:t()) return gramend它简洁而优雅,简洁到根本不需要测试就知道它是对的,优雅得像“神说要有光,于是便有了光”。而这是我的代码:caffe-windows/gram_layer.cpp at master · happynear/caffe-windows · GitHubcaffe-windows/gram_layer.cu at master · happynear/caffe-windows · GitHub两个文件,一个cpu版一个gpu版。理所当然的,我的代码除了我自己根本没人使用。如果不保持学习,就算你在从事尖端的人工智能研究,一样说淘汰就淘汰。
作者:王峰
链接:https://www.zhihu.com/question/50144455/answer/119655526
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Coding Pages托管静态博客-原理浅析

参考 DNS解析实例-ESON

github page不支持多个域名,因此不存在重定向

301,302 区别

对于用户

301,302对用户来说没有区别,他们看到效果只是一个跳转,浏览器中旧的URL变成了新的URL。页面跳到了这个新的url指向的地方。

对于引擎及站长

302 redirect: 302 代表暂时性转移(Temporarily Moved ) 临时跳转

302转向可能会有URL规范化及网址劫持的问题。可能被搜索引擎判为可疑转向,甚至认为是作弊。

302重定向和网址劫持(URL hijacking)有什么关系呢?这要从搜索引擎如何处理302转向说起。从定义来说,从网址A做一个302重定向到网址B时,主机服务器的隐含意思是网址A随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。

实际上如果搜索引擎在遇到302转向时,百分之百的都抓取目标网址B的话,就不用担心网址URL劫持了。问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。为什么呢?比如说,有的时候A网址很短,但是它做了一个302重定向到B网址,而B网址是一个很长的乱七八糟的URL网址,甚至还有可能包含一些问号之类的参数。很自然的,A网址更加用户友好,而B网址既难看,又不用户友好。这时Google很有可能会仍然显示网址A。

由于搜索引擎排名算法只是程序而不是人,在遇到302重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL劫持的可能性。也就是说,一个不道德的人在他自己的网址A做一个302重定向到你的网址B,出于某种原因, Google搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B上的内容,这种情况就叫做网址URL劫持。你辛辛苦苦所写的内容就这样被别人偷走了。

DNS解析有一条 显性URL-将域名302重定向到另外一个地址。

301 redirect: 301 代表永久性转移(Permanently Moved),

当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。
301的好处是:

  • 第一, 没有网址规范化问题。
  • 第二, 也很重要的,网页A的PR网页级别会传到网页B。

变更网站域名建议直接做301重定向,UEL跳转不利于SEO蜘蛛本身不喜欢,运气不好还会被判作弊
当网页A用301重定向到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。
好处是,第一没有网址规划问题;第二,网页A的PR网页级别会传到网页B。

大家常用的301 302

301

t.cn
知乎跳转
dns解析跳转
coding page跳转主页

如何实现转发

  • DNS可配置 302转发
  • apache / nginx 配置文件中写转发规则,rewrite xxx yyy 301
  • 写一个 index.html 文件,里面写 meta refresh 跳转规则