Ben görev bir görüntüde bir kutu (x, y) konumunu tahmin etmektir regresyon için basit bir evrişimsel sinir ağı, örneğin:
Ağın çıktısında biri x, diğeri y için olmak üzere iki düğüm vardır. Ağın geri kalanı standart bir evrişimli sinir ağıdır. Kayıp, kutunun öngörülen konumu ile yer gerçeği konumu arasındaki standart ortalama kare hatasıdır. Bu görüntülerin 10000'i üzerinde eğitim alıyorum ve 2000'de onaylıyorum.
Yaşadığım sorun, önemli bir eğitimden sonra bile, kaybın gerçekten azalmamasıdır. Ağın çıkışını gözlemledikten sonra, ağın her iki çıkış düğümü için sıfıra yakın değerlere eğilim gösterdiğini fark ettim. Bu nedenle, kutunun konumunun tahmini her zaman görüntünün merkezidir. Tahminlerde bir miktar sapma var, ama her zaman sıfır civarında. Aşağıda kaybı gösterir:
Bunu bu grafikte gösterilenden daha fazla dönem için çalıştırdım ve kayıp hala azalmıyor. İlginçtir ki, kayıp aslında bir noktada artar.
Yani, ağın iyi bir uyum öğrenmek yerine sadece eğitim verilerinin ortalamasını tahmin ettiği görülüyor. Bunun neden olabileceğine dair bir fikrin var mı? Adam'ı başlangıç öğrenme oranı 0,01 ve relus'u aktivasyon olarak optimize edici olarak kullanıyorum
Eğer benim kod (Keras) bazı ilgileniyorsanız, aşağıda:
# Create the model
model = Sequential()
model.add(Convolution2D(32, 5, 5, border_mode='same', subsample=(2, 2), activation='relu', input_shape=(3, image_width, image_height)))
model.add(Convolution2D(64, 5, 5, border_mode='same', subsample=(2, 2), activation='relu'))
model.add(Convolution2D(128, 5, 5, border_mode='same', subsample=(2, 2), activation='relu'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(2, activation='linear'))
# Compile the model
adam = Adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=adam)
# Fit the model
model.fit(images, targets, batch_size=128, nb_epoch=1000, verbose=1, callbacks=[plot_callback], validation_split=0.2, shuffle=True)