Udacity的自动驾驶汽车模拟器,有关改进模型的提示?

时间:2019-07-24 08:57:44

标签: tensorflow keras

我正在使用Udacity提供的用于自动驾驶汽车项目的模拟器。 我正在尝试使用tensorflow和keras学习和改进有关机器学习的知识。 我建立了一个Nvidia所用的模型

Nvidia Model 模拟器有2条轨道。 首先,我开车了8圈(一个方向4次,相反方向4次),并且收集了大约8000个转向数据。然后,我删除了一些0°转向数据,并将训练数据降至2500。 当我训练模型时,我得到了约0.06的训练毫秒和约0.04的验证毫秒。 在第一个赛道上,赛车能够很好地驾驶,但是在第二个赛道上却不能。 因此,我在第二条跑道上记录了2圈,我的数据增加到3500,火车和发球台也增加了。训练损失约为〜0.08,val损失约为〜0.06。 赛车能够在第一个赛道上甚至在第二个赛道的前半段行驶良好。因此,我尝试增加数据时间。我在第二条轨道上记录了另一圈(现在每个方向为2圈),现在的训练数据为5986。 问题是现在的训练mse是〜0.1,val mse是〜0.7 赛车在第一个赛道上行驶良好,但有时偏离赛道。 我想问你一些建议,也许我的逻辑模型还不够好。 我应该怎么做才能改善模型?在2500个转向数据时,如何评估0.1的损失在6000个转向角下是否好,是否比0.06的损失更好? 我将代码张贴在下面:

def load_data():
    image_paths = data[["center", "left", "right"]].values
    steerings = data["steering"].values

    return train_test_split(image_paths, steerings, test_size=0.2, random_state=1)
def augment_image(image, steering_angle):
    image = mpimg.imread(image)
    if np.random.rand() < 0.5:
        image = pan_image(image)
    if np.random.rand() < 0.5:
        image = zoom_image(image)
    if np.random.rand() < 0.5:
        image = image_brightness(image)
    if np.random.rand() < 0.5:
        image, steering_angle = flip_image(image, steering_angle)

    return image, steering_angle


def image_preprocess(image):
    image = image[60:135, :, :]
    image = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
    image = cv2.GaussianBlur(image, (3, 3), 0)
    image = cv2.resize(image, (200, 66))  # Image input size of the Nvidia model architecture
    image = image / 255

    return image


def batch_generator(image_paths, steering_angles, batch_size, is_training):
    while True:
        batch_image = []
        batch_steering = []
        for _ in range(batch_size):
            index = random.randint(0, len(image_paths) - 1)

            center, left, right = image_paths[index]

            steering_angle = steering_angles[index]
            if is_training:

                random_image = np.random.choice(3)
                if random_image == 0:
                    image, steering_angle = augment_image(center, steering_angle)
                elif random_image == 1:
                    image, steering_angle = augment_image(left, steering_angle + 0.2)
                else:
                    image, steering_angle = augment_image(right, steering_angle - 0.2)
                # image, steering_angle = augment_image(image, steering_angle)
            else:
                image = mpimg.imread(center)
                steering_angle = steering_angle

            image = image_preprocess(image)
            batch_image.append(image)
            batch_steering.append(steering_angle)
        yield (np.asarray(batch_image), np.asarray(batch_steering))


def nvidia_model():

    model = Sequential()
    model.add(Conv2D(filters=24, kernel_size=(5, 5), strides=(2, 2), input_shape=(66, 200, 3), activation="elu"))
    model.add(Conv2D(filters=36, kernel_size=(5, 5), strides=(2, 2), activation="elu"))
    model.add(Conv2D(filters=48, kernel_size=(5, 5), strides=(2, 2), activation="elu"))
    model.add(Conv2D(filters=64, kernel_size=(3, 3), activation="elu"))
    model.add(Conv2D(filters=64, kernel_size=(3, 3), activation="elu"))
    model.add(Flatten())

    model.add(Dense(units=100, activation="elu"))
    model.add(Dense(units=50, activation="elu"))
    model.add(Dense(units=10, activation="elu"))
    model.add(Dense(units=1))

    optimizer = Adam(lr=1e-4)
    model.compile(loss="mse", optimizer=optimizer)

    return model


nvidia_model = nvidia_model()
print(nvidia_model.summary())

start_time = time.clock()
cut_image_path()
X_train, X_valid, y_train, y_valid = load_data()
history = nvidia_model.fit_generator(batch_generator(X_train, y_train, 32, True),
                                     steps_per_epoch=len(X_train),
                                     epochs=7,
                                     validation_data=batch_generator(X_valid, y_valid, 32, False),
                                     validation_steps=200,
                                     verbose=1,
                                     shuffle=1)

也许每个时期的批次大小/步骤不平衡? 通过6000个训练数据可以将损失降低到0.05以下吗?

在第一个时期之后,我将此日志附加为mse的“怪异”增益

5984/5986 [============================>.] - ETA: 0s - loss: 0.1266
5985/5986 [============================>.] - ETA: 0s - loss: 0.1266
5986/5986 [==============================] - 703s 117ms/step - loss: 0.1266 
- val_loss: 0.0986
Epoch 5/7

1/5986 [..............................] - ETA: 3:52 - loss: 0.0624
3/5986 [..............................] - ETA: 3:54 - loss: 0.0730
5/5986 [..............................] - ETA: 3:49 - loss: 0.0753
7/5986 [..............................] - ETA: 3:50 - loss: 0.0797
9/5986 [..............................] - ETA: 3:50 - loss: 0.1029
11/5986 [..............................] - ETA: 3:48 - loss: 0.1049
13/5986 [..............................] - ETA: 3:47 - loss: 0.1074
14/5986 [..............................] - ETA: 5:03 - loss: 0.1088
15/5986 [..............................] - ETA: 6:19 - loss: 0.1058
16/5986 [..............................] - ETA: 7:14 - loss: 0.1075
17/5986 [..............................] - ETA: 7:47 - loss: 0.1093
18/5986 [..............................] - ETA: 8:15 - loss: 0.1087
19/5986 [..............................] - ETA: 8:40 - loss: 0.1086
20/5986 [..............................] - ETA: 9:07 - loss: 0.1089
21/5986 [..............................] - ETA: 9:29 - loss: 0.1062
22/5986 [..............................] - ETA: 9:50 - loss: 0.1058
23/5986 [..............................] - ETA: 10:10 - loss: 0.1047
24/5986 [..............................] - ETA: 10:29 - loss: 0.1028
25/5986 [..............................] - ETA: 10:42 - loss: 0.1020
26/5986 [..............................] - ETA: 11:00 - loss: 0.1022
27/5986 [..............................] - ETA: 11:22 - loss: 0.1023
28/5986 [..............................] - ETA: 11:37 - loss: 0.1047
29/5986 [..............................] - ETA: 11:42 - loss: 0.1061
30/5986 [..............................] - ETA: 11:48 - loss: 0.1055
31/5986 [..............................] - ETA: 11:55 - loss: 0.1067
32/5986 [..............................] - ETA: 11:59 - loss: 0.1056
33/5986 [..............................] - ETA: 12:02 - loss: 0.1050
34/5986 [..............................] - ETA: 12:10 - loss: 0.1059
35/5986 [..............................] - ETA: 12:18 - loss: 0.1049
36/5986 [..............................] - ETA: 13:12 - loss: 0.1063
37/5986 [..............................] - ETA: 13:18 - loss: 0.1064
38/5986 [..............................] - ETA: 13:24 - loss: 0.1066
39/5986 [..............................] - ETA: 13:29 - loss: 0.1084
40/5986 [..............................] - ETA: 13:36 - loss: 0.1108
41/5986 [..............................] - ETA: 13:41 - loss: 0.1115
42/5986 [..............................] - ETA: 13:54 - loss: 0.1106
43/5986 [..............................] - ETA: 14:00 - loss: 0.1105
44/5986 [..............................] - ETA: 14:05 - loss: 0.1101

0 个答案:

没有答案