【发布时间】:2021-05-02 21:03:00
【问题描述】:
我已经创建了一个 Nvidia 自动驾驶汽车的 Keras 模型。https://arxiv.org/pdf/1604.07316.pdf 但是有个问题,loss很高,准确率为0。
这是我使用的 45000 张图像的图像数据集。
我裁剪图像的大小。
def LoadTrain(batch_size):
global train_batch_pointer
x_out=[]
y_out=[]
for i in range(0, batch_size):
Image.open(train_xs[(train_batch_pointer + i) % num_train_images])
# reading width, height
width, height = im.size
left, top, right, bottom = 150,height/2, width, height
im_new = im.crop((left, top, right, bottom))
img_arr = np.array(im_new)
x_out.append(img_arr)
y_out.append([(train_batch_pointer + i) % num_train_images])
return x_out, y_out
X_train, y_train = LoadTrain(len(train_xs))
X_test, y_test = LoadTrain(len(val_xs))
X_train_new = asarray(X_train, dtype=np.float32)
X_test_new = asarray(X_test, dtype=np.float32)
y_train_new = asarray(y_train, dtype=np.float32)
y_test_new = asarray(y_test, dtype=np.float32)
型号
def keras_model(input_data):
model = Sequential()
model.add(Lambda(lambda x: x/255., input_shape=input_data))
model.add(BatchNormalization())
model.add(Conv2D(24, (5,5), activation='relu', strides=(2, 2)))
model.add(Conv2D(36, (5,5), activation='relu', strides=(2, 2)))
model.add(Conv2D(48, (5,5), activation='relu', strides=(2, 2)))
model.add(Conv2D(64,(3,3), activation='relu', strides=(1, 1)))
model.add(Conv2D(64,(3,3), activation='relu', strides=(1, 1)))
model.add(Flatten())
model.add(Dropout(0.3))
model.add(Dense(1164, activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='relu'))
return model
模型调用
model = keras_model(X_train_new[0].shape)
keras.utils.plot_model(model, 'generator.png', show_shapes=True)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lambda (Lambda) (None, 128, 305, 3) 0
_________________________________________________________________
batch_normalization (BatchNo (None, 128, 305, 3) 12
_________________________________________________________________
conv2d (Conv2D) (None, 62, 151, 24) 1824
_________________________________________________________________
conv2d_1 (Conv2D) (None, 29, 74, 36) 21636
_________________________________________________________________
conv2d_2 (Conv2D) (None, 13, 35, 48) 43248
_________________________________________________________________
conv2d_3 (Conv2D) (None, 11, 33, 64) 27712
_________________________________________________________________
conv2d_4 (Conv2D) (None, 9, 31, 64) 36928
_________________________________________________________________
flatten (Flatten) (None, 17856) 0
_________________________________________________________________
dropout (Dropout) (None, 17856) 0
_________________________________________________________________
dense (Dense) (None, 1164) 20785548
_________________________________________________________________
dense_1 (Dense) (None, 100) 116500
_________________________________________________________________
dense_2 (Dense) (None, 50) 5050
_________________________________________________________________
dense_3 (Dense) (None, 10) 510
_________________________________________________________________
dense_4 (Dense) (None, 1) 11
=================================================================
Total params: 21,038,979
Trainable params: 21,038,973
Non-trainable params: 6
_________________________________________________________________
None
编译
adam = Adam(learning_rate=0.0001)
model.compile(optimizer=adam, loss='mean_squared_error', metrics=['Accuracy'])
适合
model.fit(X_train_new, y_train_new, epochs=10, batch_size=64, verbose=1, validation_data=.
(X_test_new, y_test_new), callbacks = callback)
输出
Epoch 1/30
568/568 [===============================] 3762s 7s/步 - 损失:195265259.8383 - 精度:0.0000 e+00 - val_loss:148408736.0000 - val_accuracy:0.0000e+00
Epoch 2/30
568/568 [===============================] - 2313s 4s/步 - 损失:111066534.5659 - 准确度: 0.0000e+00 - val_loss:197166144.0000 - val_accuracy:0.0000e+00
不知道为什么损失这么高。
解决方案 PIL有个问题,为什么loss很高。我用cv2调整图片大小,loss很低。
【问题讨论】:
-
您要构建什么?最后一个
dense(1)是什么?你是在做回归还是分类?为什么你有损失为mse,然后使用accuracy作为衡量标准?为什么最后一层的激活是relu?为什么使用正确语法的“准确度”而不是“准确度”? -
请尽可能多地回答每个问题。
-
我已经为我的上述评论添加了详细的答案。我希望它可以帮助您回答您的问题。谢谢。
-
这是一个回归问题,这就是为什么密集(1)。它将尝试预测转向角作为输出。
-
准确性是错误的,请忽略。我正在使用线性激活检查输出,为什么要激活 relu 以减少损失。
标签: tensorflow keras deep-learning conv-neural-network