Модель дает одинаковый выход, точность, потери для всех входов (керас) - PullRequest
0 голосов
/ 04 марта 2019

Это моя модель для самоходного автомобиля 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

Пожалуйста, помогите. Спасибо

1 Ответ

0 голосов
/ 04 марта 2019

Ваша модель ничего не изучает, потому что вы использовали активацию softmax с одним выходным нейроном, что означает, что выходной сигнал является постоянным 1,0 с любыми значениями весов.

Вы должны изменить активацию на гиперболический тангенс (tanh), так как он соответствует диапазону ваших выходных данных [-1, 1].Вам также следует удалить метрику точности, поскольку она является задачей регрессии, а точность относится только к классификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...