目标
第三个作业,是实现在模拟器上的“自动驾驶”。这个作业要训练出一个模型,模拟器给出汽车前置摄像头的图像作为输入,模型要输出一个方向(往左或往右多少)。
因为会用到 Keras 框架,所以本文会先简单介绍 Keras. 由于课程还提到了 Transfer Learning, 所以也整理上笔记。
feichashao's Blog
Udacity 无人驾驶课程的笔记
第三个作业,是实现在模拟器上的“自动驾驶”。这个作业要训练出一个模型,模拟器给出汽车前置摄像头的图像作为输入,模型要输出一个方向(往左或往右多少)。
因为会用到 Keras 框架,所以本文会先简单介绍 Keras. 由于课程还提到了 Transfer Learning, 所以也整理上笔记。
这个作业的目标是,训练出一个网络,给它32x32图片作为输入,它能判断出这个图片代表什么交通标识。
这个网络基于 LeNet, 所以本文会先讲述 DNN 和 CNN 的一些基础知识,再讨论作业的代码实现和训练过程。
单层网络 f=WX+b 只能进行线性转换,难以进行复杂的判断。通过堆积多层网络,添加非线性的元素(如activation layer),使得网络可以处理更负责的情况。
神经网络由一个个神经元组成,简单而言,每个神经元会对输入进行一些简单运算,得到输出。而训练一个网络,则是调整网络中的参数,使得输出接近学习样本的期望输出。
比如,假设有一个网络只计算 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 的神经元则会对输入进行运算,将输出传给下一层。
Udacity CarND-term1 Lesson 5 让我们自己去实现一个 Miniflow, 相当于一个玩具版的 Tensorflow. 通过实现 Miniflow, 可以体会到 Forward Pass 和 Backpropagation 的过程。
继续阅读“MiniFlow - 自制玩具版 TensorFlow”
这是 Udacity 无人驾驶课程的笔记。第一个作业是检测车道,简单地说就是把路面上的行车线找出来。
这个作业需要有 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
颜色是区分行车线的其中一个因素。对于一种颜色,可以有不同的编码方式,常见的是RGB,YUV等。
由于行车线的颜色与周围环境有一定区分,我们可以对RGB分别设定阈值,把有用的信息分离出来。
继续阅读“CarND Project 1 - 车道检测”