MiniFlow - 自制玩具版 TensorFlow


神经网络由一个个神经元组成,简单而言,每个神经元会对输入进行一些简单运算,得到输出。而训练一个网络,则是调整网络中的参数,使得输出接近学习样本的期望输出。
比如,假设有一个网络只计算 y = w * x, 初始值 w=5。把 x=10 放进这个网络,会得到 y=50. 而我们预期 y=20. 通过训练这个网络,w 将会被调整为 w=2, 输出 y=20 则符合(接近)预期。

在实际应用中,一个网络会有不少参数,我们需要一个方法来调整这些参数。按我的理解,这个“调整参数”的过程就是机器学习的过程。

一个常见的神经网络,会由 Input layer, Hidden layer 和 output layer 组成。每层 layer 由众多神经元组成,Input/output layer 的神经元通常仅存储一个数值,本身不会进行运算。Hidden layer 的神经元则会对输入进行运算,将输出传给下一层。

By Glosser.ca - Own work, Derivative of File:Artificial neural network.svg, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=24913461

Udacity CarND-term1 Lesson 5 让我们自己去实现一个 Miniflow, 相当于一个玩具版的 Tensorflow. 通过实现 Miniflow, 可以体会到 Forward Pass 和 Backpropagation 的过程。
继续阅读“MiniFlow - 自制玩具版 TensorFlow”

rpm是怎样安装/更新文件的?

这个问题的更准确表述是,在用rpm命令更新软件包时,这个软件包里的某个文件是逐渐改变的,还是原子的?

比如说,有一个软件包叫 fake-1.rpm,里面有A/B/C三个文件。这个软件包有一个更新版本 fake-2.rpm, 其中对B文件进行了变更。那么,在进行rpm的升级过程中,文件B会发生怎样的改变?在升级过程中,文件B有没有可能是不完整的?它的MD5值是yyy1234, yyy5678 还是其它值?

  fake-1.rpm (version 1)
  +-------+---------+
  | Files | MD5     |
  +-------+---------+
  | A     | xxx1234 |
  +-------+---------+
  | B     | yyy1234 |
  +-------+---------+
  | C     | zzz1234 |
  +-------+---------+

  fake-2.rpm (version 2)
  +-------+---------+
  | Files | MD5     |
  +-------+---------+
  | A     | xxx1234 |
  +-------+---------+
  | B     | yyy5678 |
  +-------+---------+
  | C     | zzz1234 |
  +-------+---------+

继续阅读“rpm是怎样安装/更新文件的?”

文件系统的 nodev 挂载选项有什么用?

nodev挂载选项有什么用?

一些安全策略会要求,除了根目录(/),其他目录如果挂载了单独的分区,应该添加 nodev 挂载选项。
所以 nodev 有什么用呢? mount 的 man 手册如此解释:

nodev  Do not interpret character or block special devices on the file system.

好吧,看完我还是没理解这个选项到底是干嘛的。网上搜索到了几个回答[2][3]。如果在挂载时,添加了nodev选项,那么系统不会把该文件系统里面的 block/character 文件当作是 block/character 文件来处理。

举个例子,一位别有用心的用户,在他有权限的机器上(比如他的笔记本),在U盘上创建了一个 block 文件,指向 sd* 之类的数据盘,这么巧他有权限把U盘插到服务器上,这么巧服务器自动挂载了这个U盘且没有 nodev 挂载选项,那么这位用户就能通过这个 block 文件读取到服务器上相应磁盘的数据。

继续阅读“文件系统的 nodev 挂载选项有什么用?”

在两节点Pacemaker集群中使用Quorum Device来避免fencing race

使用场景

两节点集群示例
- 在一个两节点高可用集群中,心跳和fence设备不在同一个网络;
- 如果心跳网络出现异常,两个节点则会出现分离;
- 在 Corosync 2.x 中,两节点默认(必须)开启two_node模式,在这个分离的情况下,两节点均可达到quorate的状态;
- 由于fence网络可以正常连同,两节点会互相fence对方,造成fencing race,两节点均被重启而无法提供服务;
两节点心跳丢失示意
继续阅读“在两节点Pacemaker集群中使用Quorum Device来避免fencing race”

周末游大同:北岳恒山+云冈石窟

某同事要去三山五岳打卡,在朋友圈诱惑大家去北岳恒山。周五晚上火车出发,周日下午火车返回,不需要请假。

行程开销

周末整个行程总共开销738元,吃饱喝好睡得也挺舒服。

花费细分
类别 项目 金额 备注
交通 北京->大同 99.5 K695次
交通 大同->北京 109.5 K696次 包含异地取票5元
交通 包车 87.5 大同恒山 4人包出租车350元
交通 公交 4 从酒店到云冈石窟
交通 黑车 10 从云冈石窟到市区
交通 滴滴 6 4人一共24元
住宿 云冈国际酒店 84 双床标间168元
门票 悬空寺外 25
门票 恒山 47
门票 云冈石窟 125
餐饮 晚饭 52 凯鸽三部 4人一共208元
餐饮 3.5
餐饮 早餐 18 外卖华莱士
餐饮 午饭 61 凯鸽火锅 4人一共243元

继续阅读“周末游大同:北岳恒山+云冈石窟”

CarND Project 1 - 车道检测


这是 Udacity 无人驾驶课程的笔记。第一个作业是检测车道,简单地说就是把路面上的行车线找出来。

Origin

target

环境准备

这个作业需要有 Anaconda 的环境,然后装上 jupyter notebook, OpenCV 等必要的库。
具体的安装方法可参考(fork 自 Udacity):
https://github.com/feichashao/CarND-Term1-Starter-Kit/blob/master/doc/configure_via_anaconda.md
其中,安装 tensorflow 的时候,可能会遇到 Google 被墙的情况,所以安装的时候最好先挂个代理,在安装前设置环境变量, 比如:

# export http_proxy=http://8.8.8.8:5187/ 
# export https_proxy=$http_proxy

颜色选择(Color Selection)

颜色是区分行车线的其中一个因素。对于一种颜色,可以有不同的编码方式,常见的是RGB,YUV等。

由于行车线的颜色与周围环境有一定区分,我们可以对RGB分别设定阈值,把有用的信息分离出来。
继续阅读“CarND Project 1 - 车道检测”