摘要:智能駕駛源碼詳解二模型簡(jiǎn)介本使用進(jìn)行圖像分類前進(jìn)左轉(zhuǎn)右轉(zhuǎn)。其性能超群,在年圖像識(shí)別比賽上展露頭角,是當(dāng)時(shí)的冠軍,由團(tuán)隊(duì)開(kāi)發(fā),領(lǐng)頭人物為教父。
GTAV智能駕駛源碼詳解(二)——Train the AlexNet 模型簡(jiǎn)介:
本AI(ScooterV2)使用AlexNet進(jìn)行圖像分類(前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn))。
Alexnet是一個(gè)經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò),有5個(gè)卷積層,其后為3個(gè)全連接層,最后的輸出激活函數(shù)為分類函數(shù)softmax。其性能超群,在2012年ImageNet圖像識(shí)別比賽上展露頭角,是當(dāng)時(shí)的冠軍Model,由SuperVision團(tuán)隊(duì)開(kāi)發(fā),領(lǐng)頭人物為AI教父Jeff Hinton。
網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示:
圖1 AlexNet示意圖
#導(dǎo)入依賴庫(kù)(tflearn backended) import tflearn from tflearn.layers.conv import conv_2d, max_pool_2d from tflearn.layers.core import input_data, dropout, fully_connected from tflearn.layers.estimator import regression from tflearn.layers.normalization import local_response_normalization from collections import Counter from numpy.random import shuffle import numpy as np import numpy as np import pandas as pd #定義AlexNet模型 def alexnet(width, height, lr): network = input_data(shape=[None, width, height, 1], name="input") network = conv_2d(network, 96, 11, strides=4, activation="relu") network = max_pool_2d(network, 3, strides=2) network = local_response_normalization(network) network = conv_2d(network, 256, 5, activation="relu") network = max_pool_2d(network, 3, strides=2) network = local_response_normalization(network) network = conv_2d(network, 384, 3, activation="relu") network = conv_2d(network, 384, 3, activation="relu") network = conv_2d(network, 256, 3, activation="relu") network = max_pool_2d(network, 3, strides=2) network = local_response_normalization(network) network = fully_connected(network, 4096, activation="tanh") network = dropout(network, 0.5) network = fully_connected(network, 4096, activation="tanh") network = dropout(network, 0.5) network = fully_connected(network, 3, activation="softmax") network = regression(network, optimizer="momentum", loss="categorical_crossentropy", learning_rate=lr, name="targets") model = tflearn.DNN(network, checkpoint_path="model_alexnet", max_checkpoints=1, tensorboard_verbose=2, tensorboard_dir="log") return modelAlexNet注釋:
模型傳入?yún)?shù)為3個(gè):圖像的長(zhǎng)度、寬度和梯度下降學(xué)習(xí)率;
模型的Input Layer接受數(shù)據(jù)集中的圖片作為輸入,圖像長(zhǎng)度160,高度為90,channel數(shù)量為三,輸入數(shù)據(jù)為m*160*90*3的張量,m為一次英處理的樣本數(shù)量;
Input Layer后跟著第一個(gè)卷積層,卷積核數(shù)量為96,卷積核尺寸為11*11,卷積步長(zhǎng)為4,該卷積層使用ReLu作為激活函數(shù);
第一個(gè)卷積層后跟著第一個(gè)池化層,池化類型為MaxPooling,池化尺寸3*3,池化步長(zhǎng)為2;
池化之后的結(jié)果通向LRN層,jeff hinton的標(biāo)注為模擬大腦的側(cè)向抑制,對(duì)張量中的每個(gè)元素都用它和它相鄰feature map的元素的平均值代替(雖然好像并沒(méi)有什么用),具體原理如圖2;
之后是AlexNet的第二個(gè)卷積層,卷積核數(shù)量為256,卷積核尺寸為5*5,卷積步長(zhǎng)默認(rèn)為1,該卷積層依然使用ReLu作為激活函數(shù);
之后的池化層依舊為MaxPooling,池化尺寸3*3,池化步長(zhǎng)為2;
第二個(gè)LRN層,作用同上;
之后是三個(gè)接連的卷積層,卷積核數(shù)量依次為384、384、256,卷積核尺寸都為3*3,都用ReLu作為激活函數(shù);
經(jīng)過(guò)尺寸為3*3,步長(zhǎng)為2的池化層和一個(gè)LRN層之后,卷積網(wǎng)絡(luò)部分結(jié)束,通向3個(gè)全連接層。前兩個(gè)全連接層都向后輸出長(zhǎng)度為4096的向量,使用tanh作為非線性激活函數(shù),都有50%的dropout概率,神經(jīng)元有二分之一的可能性被deactivate;第三個(gè)全連接層為輸出層,輸出3維向量,并使用softmax作為分類的激活函數(shù)。
每一次前向傳播完成后,使用交叉熵cross_entropy作為卷積網(wǎng)絡(luò)的loss函數(shù);整個(gè)神經(jīng)網(wǎng)絡(luò)使用momentum作為優(yōu)化(梯度下降加上momentum過(guò)濾由于lr過(guò)高引起的振蕩),個(gè)人覺(jué)得使用Adam也許效果會(huì)更好,收斂會(huì)更快。
圖2 Local_Response_Normolization示意圖
WIDTH = 160 HEIGHT = 90 LR = 1e-3 EPOCHS = 10 MODEL_NAME = "scooterv2.model" model = alexnet(WIDTH, HEIGHT, LR) train_data = np.load("training_data_after_shuffle.npy") train = train_data[:-1000] test = train_data[-1000:] X = np.array([i[0] for i in train]).reshape(-1,WIDTH,HEIGHT,1) Y = [i[1] for i in train] test_x = np.array([i[0] for i in test]).reshape(-1,WIDTH,HEIGHT,1) test_y = [i[1] for i in test] for index in range(1,200): model.fit({"input": X}, {"targets": Y}, n_epoch=EPOCHS, validation_set=({"input": test_x}, {"targets": test_y}), snapshot_step=500, show_metric=True, run_id=MODEL_NAME) model.save(MODEL_NAME)
學(xué)習(xí)率為0.001,for循環(huán)中每一次迭代訓(xùn)練的epoch數(shù)量為10,mini_batch的樣本數(shù)量使用默認(rèn)值64;數(shù)據(jù)集的后1000個(gè)作為validation set,剩余的都作為測(cè)試集使用。
跑一次一共訓(xùn)練了200*10=2000次,但實(shí)際上參數(shù)更新了20萬(wàn)次,每一次mini_batch都更新一次參數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44463.html
摘要:本暫且稱之為借鑒了美國(guó)死宅的方案,只使用截圖捕捉的畫面以模擬攝像頭數(shù)據(jù)作為的輸入,并沒(méi)有真實(shí)的智能駕駛所涉及的傳感器與雷達(dá)數(shù)據(jù)。在游戲中人為駕駛小時(shí),將每一幀圖片以及其所對(duì)應(yīng)的操作向量記錄在數(shù)據(jù)集張量中。每幀保存一次數(shù)據(jù)集設(shè)置為暫停鍵。 項(xiàng)目介紹 場(chǎng)景足夠豐富,操作足夠簡(jiǎn)單,有大量的交通工具和駕駛視角可供選擇,游戲《Grand Theft Auto 5》是一個(gè)相對(duì)廉價(jià)且適合初級(jí)人工智能...
摘要:首先第一種當(dāng)然是在年提出的,它奠定了整個(gè)卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)。其中局部感受野表示卷積核只關(guān)注圖像的局部特征,而權(quán)重共享表示一個(gè)卷積核在整張圖像上都使用相同的權(quán)值,最后的子采樣即我們常用的池化操作,它可以精煉抽取的特征。 近日,微軟亞洲研究院主辦了一場(chǎng)關(guān)于 CVPR 2018 中國(guó)論文分享會(huì),機(jī)器之心在分享會(huì)中發(fā)現(xiàn)了一篇非常有意思的論文,它介紹了一種新型卷積網(wǎng)絡(luò)架構(gòu),并且相比于 DenseNet...
閱讀 1942·2021-11-24 09:39
閱讀 3526·2021-09-28 09:36
閱讀 3296·2021-09-06 15:10
閱讀 3453·2019-08-30 15:44
閱讀 1161·2019-08-30 15:43
閱讀 1806·2019-08-30 14:20
閱讀 2721·2019-08-30 12:51
閱讀 2042·2019-08-30 11:04