ฉันกำลังฝึกอบรมเครือข่ายประสาทเทียมแบบง่ายสำหรับการถดถอยซึ่งงานนี้จะทำนายตำแหน่ง (x, y) ของกล่องในภาพเช่น:
เอาต์พุตของเครือข่ายมีสองโหนดหนึ่งรายการสำหรับ x และอีกหนึ่งสำหรับ y ส่วนที่เหลือของเครือข่ายเป็นเครือข่ายประสาทเทียมมาตรฐาน การสูญเสียเป็นค่าเฉลี่ยความคลาดเคลื่อนกำลังสองระหว่างตำแหน่งที่ทำนายของกล่องและตำแหน่งจริงของพื้นดิน ฉันกำลังฝึกอบรมเกี่ยวกับ 10,000 ภาพเหล่านี้และการตรวจสอบในปี 2000
ปัญหาที่ฉันมีคือแม้ว่าหลังจากการฝึกอบรมที่สำคัญแล้วการสูญเสียไม่ลดลงจริงๆ หลังจากสังเกตเอาท์พุทของเครือข่ายฉันสังเกตว่าเครือข่ายมีแนวโน้มที่จะส่งออกค่าใกล้ศูนย์สำหรับทั้งสองเอาท์พุทโหนด ดังนั้นการทำนายตำแหน่งของกล่องจึงเป็นจุดศูนย์กลางของภาพเสมอ มีการเบี่ยงเบนบางอย่างในการคาดการณ์ แต่มักจะอยู่ที่ประมาณศูนย์ ด้านล่างแสดงให้เห็นถึงการสูญเสีย:
ฉันใช้งานสิ่งนี้ได้หลายครั้งมากกว่าที่แสดงในกราฟนี้และการสูญเสียยังไม่ลดลง น่าสนใจที่นี่การสูญเสียเพิ่มขึ้น ณ จุดหนึ่ง
ดังนั้นดูเหมือนว่าเครือข่ายจะทำนายค่าเฉลี่ยของข้อมูลการฝึกอบรมมากกว่าการเรียนรู้ที่เหมาะสม ความคิดเห็นใด ๆ เกี่ยวกับสาเหตุที่อาจเป็นเช่นนี้ ฉันใช้อดัมเป็นเครื่องมือเพิ่มประสิทธิภาพด้วยอัตราการเรียนรู้เริ่มต้นที่ 0.01 และการเปิดใช้งานใหม่
หากคุณมีความสนใจในบางรหัสของฉัน (Keras) มันเป็นด้านล่าง:
# 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)