# 5分钟构建一个自己的无人驾驶车

#### 接下来让我们训练一下自己的无人驾驶车

from flat_game import carmunk
import numpy as np
import random
import csv
from nn import neural_net, LossHistory
import os.path
import timeit

NUM_INPUT = 3
GAMMA = 0.9  # Forgetting.
TUNING = False  # If False, just use arbitrary, pre-selected params.

# 训练一个神经网络，有一些hyper parameters
def train_net(model, params):

filename = params_to_filename(params)

# 定义变量：观察数据
observe = 1000  # Number of frames to observe before training.
epsilon = 1
train_frames = 1000000  # Number of frames to play.
batchSize = params['batchSize']
buffer = params['buffer']

# 定义变量：位置
# Just stuff used below.
max_car_distance = 0
car_distance = 0
t = 0
data_collect = []
replay = []  # stores tuples of (S, A, R, S').

loss_log = []

# 创建一个新的游戏实例
# Create a new game instance.
game_state = carmunk.GameState()

# 得到这个实例的第一个状态
# Get initial state by doing nothing and getting the state.
_, state = game_state.frame_step((2))

# 用一个timer来追踪
# Let's time it.
start_time = timeit.default_timer()

# 当我们开始建立experience replay时
# Run the frames.
while t < train_frames:

t += 1
car_distance += 1

# 我们会更新位置变量，然后依据状态随机选择行为
# Choose an action.
if random.random() < epsilon or t < observe:
action = np.random.randint(0, 3)  # random
else:
# 如果这个随机变量在我们的限制条件之外，我们会得到每个行为的Q值，
# 来帮我们找到最优的决策
# Get Q values for each action.
qval = model.predict(state, batch_size=1)
action = (np.argmax(qval))  # best

# 如果它是有效的，我们会得到一个reward
# Take action, observe new state and get our treat.
reward, new_state = game_state.frame_step(action)

# Experience replay storage.
replay.append((state, action, reward, new_state))

# 当它结束观察游戏和建立经验回放时，会开始训练采样记忆experience replaying，得到训练值
# If we're done observing, start training.
if t > observe:

# If we've stored enough in our buffer, pop the oldest.
if len(replay) > buffer:
replay.pop(0)

# Randomly sample our experience replay memory
minibatch = random.sample(replay, batchSize)

# Get training values.
X_train, y_train = process_minibatch(minibatch, model)

# 然后训练神经网络模型
# Train the model on this batch.
history = LossHistory()
model.fit(
X_train, y_train, batch_size=batchSize,
nb_epoch=1, verbose=0, callbacks=[history]
)
loss_log.append(history.losses)

# 然后更新状态
# Update the starting state with S'.
state = new_state

# Decrement epsilon over time.
if epsilon > 0.1 and t > observe:
epsilon -= (1/train_frames)

# 当car dies，
# We died, so update stuff.
if reward == -500:
# Log the car's distance at this T.
data_collect.append([t, car_distance])

# Update max.
if car_distance > max_car_distance:
max_car_distance = car_distance

# Time it.
tot_time = timeit.default_timer() - start_time
fps = car_distance / tot_time

# Output some stuff so we can watch.
print("Max: %d at %d\tepsilon %f\t(%d)\t%f fps" %
(max_car_distance, t, epsilon, car_distance, fps))

# 记录距离，重启
# Reset.
car_distance = 0
start_time = timeit.default_timer()

# 每25000 frames保存一下模型和weights
# Save the model every 25,000 frames.
if t % 25000 == 0:
model.save_weights('saved-models/' + filename + '-' +
str(t) + '.h5',
overwrite=True)
print("Saving model %s - %d" % (filename, t))

# Log results after we're done all frames.
log_results(filename, data_collect, loss_log)

The code in the video is here:
https://github.com/llSourcell/Self-Dr…

Paper 1: Long term Planning for Short Term Prediction
[http://arxiv.org/pdf/1602.01580v1.pdf(http://arxiv.org/pdf/1602.01580v1.pdf)

Paper 2: End-to-End Learning for Self-Driving Cars
[https://arxiv.org/pdf/1604.07316v1.pdf(https://arxiv.org/pdf/1604.07316v1.pdf)

More on Reinforcement Learning:
http://www2.hawaii.edu/~chenx/ics699r…
https://www.quora.com/Artificial-Inte…
http://www2.econ.iastate.edu/tesfatsi…

## 只有Python基础竟成为无人驾驶工程师，她是怎么做到的？

• Mbx8X9u
• 2017年10月31日 00:00
• 701

## 无人驾驶学习笔记

• myboyliu2007
• 2016年12月17日 23:42
• 1055

## 如何成为一名无人驾驶工程师

• qq_40027052
• 2017年11月08日 00:00
• 8543

## 你听过无人驾驶，但你了解无人驾驶的算法吗？

• 2017年05月26日 13:42
• 979

## TensorFlow学习笔记(一)

• dd864140130
• 2017年05月12日 23:15
• 13140

## 乘上这波Apollo无人驾驶红利，成为BAT急需的 AI 人才

• Px01Ih8
• 2018年01月15日 00:00
• 490

## 程序员,30岁,如何趁 AI 浪潮突破年薪天花板?

• Mbx8X9u
• 2017年11月02日 00:00
• 250

## 【美团点评】无人驾驶算法工程师 2017-09-03电话面试

• Jinlong_Xu
• 2017年09月04日 14:32
• 986

## Udacity 无人驾驶车工程师 博客笔记目录

• Dinosoft
• 2017年10月03日 05:16
• 1423

## 无人驾驶车核心算法 — SLAM

2005年，斯坦福大学的无人驾驶车 Stanley 在 DARPA 无人驾驶车挑战赛中获得冠军。斯坦福大学教授，斯坦福人工智能实验室主任，Stanley 团队队长 Sebastian Thrun 透露...
• myboyliu2007
• 2016年09月23日 15:10
• 4919

举报原因： 您举报文章：5分钟构建一个自己的无人驾驶车 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)