本AI(ScooterV2)使用AlexNet進行圖像分類(前進、左轉、右轉)。
Alexnet是一個經典的卷積神經網絡,有5個卷積層,其後爲3個全鏈接層,最後的輸出激活函數爲分類函數softmax。其性能超羣,在2012年ImageNet圖像識別比賽上展露頭角,是當時的冠軍Model,由SuperVision團隊開發,領頭人物爲AI教父Jeff Hinton。網絡
網絡結構如圖1所示:dom
圖1 AlexNet示意圖ide
#導入依賴庫(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 model
圖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)
學習率爲0.001,for循環中每一次迭代訓練的epoch數量爲10,mini_batch的樣本數量使用默認值64;數據集的後1000個做爲validation set,剩餘的都做爲測試集使用。
跑一次一共訓練了200*10=2000次,但實際上參數更新了20萬次,每一次mini_batch都更新一次參數。性能