【发布时间】:2019-07-25 11:00:17
【问题描述】:
这是我的 udacity 自动驾驶汽车模型!
model = Sequential()
model.add(Lambda(lambda x: x/127.5-1.0, input_shape=(64,64,3)))
model.add(Conv2D(3, 1, 1, activation="elu"))
model.add(Conv2D(32, 3, 3, activation='elu'))
model.add(Conv2D(32, 3, 3, activation='elu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Dropout(0.5))
model.add(Conv2D(64, 3, 3, activation='elu'))
model.add(Conv2D(64, 3, 3, activation='elu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Dropout(0.5))
model.add(Conv2D(128, 3, 3, activation='elu'))
model.add(Conv2D(128, 3, 3, activation='elu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(512, activation="elu"))
model.add(Dense(64, activation="elu"))
model.add(Dense(16, activation="elu"))
model.add(Dense(1, activation="softmax"))
model.summary()
我正在使用adam编译器来编译模型
from keras.optimizers import Adam
model.compile(optimizer=Adam(lr=0.0001),loss='mean_squared_error',metrics='accuracy'])
model.fit(X_train, y_train, batch_size=256, epochs=250, shuffle = True, validation_split=0.2)
我已经尝试了每个批次大小和时代组合,但结果似乎是一样的。我最初拍摄了 12000 张图像来训练和测试模型。我的问题准确性非常低,并且在整个时代都是恒定的。它还为每个预处理图像预测相同的输出。 (ps:我在训练之前已经对图像进行了预处理)。这里的示例输出显示了恒定的准确性和损失(太低了)。
Train on 8084 samples, validate on 2021 samples
Epoch 1/250
8084/8084 [==============================] - 8s 1ms/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 2/250
8084/8084 [==============================] - 6s 763us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 3/250
8084/8084 [==============================] - 6s 779us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 4/250
8084/8084 [==============================] - 6s 779us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 5/250
8084/8084 [==============================] - 6s 790us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 6/250
8084/8084 [==============================] - 6s 770us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 7/250
8084/8084 [==============================] - 6s 739us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 8/250
8084/8084 [==============================] - 6s 735us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 9/250
8084/8084 [==============================] - 6s 724us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 10/250
8084/8084 [==============================] - 6s 727us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
Epoch 11/250
8084/8084 [==============================] - 6s 729us/step - loss: 1.0467 - acc: 0.0014 - val_loss: 1.0666 - val_acc: 0.0015
请帮忙。谢谢
【问题讨论】:
-
具有一个输出神经元的 Softmax 没有意义,它会给出恒定的 1.0 输出。这个模型、回归或分类的任务是什么?
-
@MatiasValdenegro Regression... 它应该预测在 -1 到 1 范围内的转向角值。您为什么认为该模型具有分类任务?
-
因为准确率只适用于分类。对于这个范围,你应该在输出端使用一个神经元的 tanh 激活
-
@MatiasValdenegro 是否正确选择了损失函数...由于输出范围很小,因此损失函数的值较小,因此模型可能无法获得正确的损失值。那么你能帮我确定这个模型的损失函数吗?
-
不,损失函数是正确的。
标签: python tensorflow keras