Моя потеря сверточной сети не меняется и остается неизменной на протяжении всего обучения. как это исправить? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь обучить сверточную сеть, но потери меняются независимо от того, что я делаю. Я хочу знать, где я иду не так, а также буду благодарен за любые дружеские советы, так как я впервые имею дело с такими большими данными.

Я пробовал много комбинаций оптимизаторов (adam, SGD, adamdelta ...), функций потерь (средняя ошибка sqauare, двоичная кросс-энтропия ....) и активации (Relu, elu, selu ....), но проблема все еще сохраняется.

Характер моего проекта: это моя попытка обучить простой симулятор вождения.

Данные обучения: данные обучения разбиты примерно на ~ 4000 .h5 файлов. Каждый файл содержит ровно 200 изображений с соответствующими данными для каждого изображения, такими как скорость, ускорение и т. Д.

Из-за характера данных я решил тренироваться в мини-партиях по 200 и перебирать все файлы.

# model (I am a beginner so forgive my sloppy code)
rgb_in = Input(batch_shape=(200, 88, 200, 3), name='rgb_in')
conv_1 = Conv2D(filters=10,kernel_size=5,activation="elu",data_format="channels_last",init = "he_normal")(rgb_in)
conv_2 = Conv2D(filters=16,kernel_size=5,activation="elu",data_format="channels_last",init = "he_normal")(conv_1)
conv_3 = Conv2D(filters=24,kernel_size=5,activation="elu",data_format="channels_last",init = "he_normal")(conv_2)
conv_4 = Conv2D(filters=32,kernel_size=3,activation="elu",data_format="channels_last",init = "he_normal")(conv_3)
conv_5 = Conv2D(filters=32,kernel_size=3,activation="elu",data_format="channels_last",init = "he_normal")(conv_4)
flat = Flatten(data_format="channels_last")(conv_5)
t_in = Input(batch_shape=(200,14), name='t_in')
x = concatenate([flat, t_in])
dense_1 = Dense(100,activation="elu",init = "he_normal")(x)
dense_2 = Dense(50,activation="elu",init = "he_normal")(dense_1)
dense_3 = Dense(25,activation="elu",init = "he_normal")(dense_2)
out = Dense(5,activation="elu",init = "he_normal")(dense_3)
model = Model(inputs=[rgb_in, t_in], outputs=[out])
model.compile(optimizer='Adadelta', loss='binary_crossentropy')



for i in range(3663,6951):
    filename = 'data_0'+str(i)+'.h5'
    f = h5py.File(filename, 'r')
    rgb = f["rgb"][:,:,:,:]
    targets = f["targets"][:,:]
    rgb = (rgb - rgb.mean())/rgb.std()
    input_target[:,0] = targets[:,10]
    input_target[:,1] = targets[:,11]
    input_target[:,2] = targets[:,12]
    input_target[:,3] = targets[:,13]
    input_target[:,4] = targets[:,16]
    input_target[:,5] = targets[:,17]
    input_target[:,6] = targets[:,18]
    input_target[:,7] = targets[:,21]
    input_target[:,8] = targets[:,22]
    input_target[:,9] = targets[:,23]
    a = one_hot(targets[:,24].astype(int),6)
    input_target[:,10] = a[:,2]
    input_target[:,11] = a[:,3]
    input_target[:,12] = a[:,4]
    input_target[:,13] = a[:,5]
    output[:,0] = targets[:,0]
    output[:,1] = targets[:,1]
    output[:,2] = targets[:,2]
    output[:,3] = targets[:,4]
    output[:,4] = targets[:,5]
    model.fit([rgb,input_target], output,epochs=10,batch_size=200)

Результат:

Epoch 1/10
200/200 [==============================] - 7s 35ms/step - loss: 6.1657
Epoch 2/10
200/200 [==============================] - 0s 2ms/step - loss: 2.3812
Epoch 3/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2955
Epoch 4/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 5/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 6/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 7/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 8/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 9/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 10/10
200/200 [==============================] - 0s 2ms/step - loss: 2.2778
Epoch 1/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 2/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 3/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 4/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 5/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 6/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 7/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 8/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 9/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241
Epoch 10/10
200/200 [==============================] - 0s 2ms/step - loss: 1.9241

И, наконец, я буду признателен, если вы дадите мне какой-либо совет относительно проекта 101

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Я использовал скорость циклического обучения, и это устранило проблему.для тех, кто когда-либо сталкивался с подобной проблемой, вот ссылка на нее

https://github.com/bckenstler/CLR

0 голосов
/ 17 апреля 2019

Как насчет использования обратного вызова ReduceLROnPlateau?

from keras.callbacks import ReduceLROnPlateau

reduce_lr = ReduceLROnPlateau(monitor='loss', patience=6)

model.fit(X,y,num_epochs=666,callbacks=[reduce_lr])
...