簡體   English   中英

在Keras上正確建立模型

[英]Building a model on Keras correctly

我是神經網絡和Keras的新手,我想構建一個可預測圖像某些值的CNN。 (這三個值可預測圖像頂部模糊的大小,長度和寬度)。 所有3個值的范圍都可以從0到1,並且我有一個很大的數據集。

但是我不確定如何構建CNN,因為到目前為止我構建的所有原型代碼都為我提供了[1.,0.,0.]格式的預測,而不是0到1之間的范圍。每個值。 最重要的是,盡管更改了SGD優化器中的時期數和衰減值,但我的損失函數完全沒有變化。 您能告訴我我要去哪里了嗎? 這是我到目前為止的內容:

images, labels = load_dataset("images")   # function that loads images
images = np.asarray(images) # images are flattened 424*424 arrays (grayscale)
labels = np.asarray(labels) # Lables are 3-arrays, each value is float from 0-1

# I won't write this part but here I split into train_imgs and test_imgs

model = keras.Sequential()
# explicitly define SGD so that I can change the decay rate
sgd = keras.optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

model.add(keras.layers.Dense(32, input_shape=(424*424,) ))
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.Dense(3, activation='softmax'))

model.compile(loss='mean_squared_error',optimizer=sgd)
# note: I also tried defining a weighted binary crossentropy but it changed nothing

checkpoint_name = 'Weights-{epoch:03d}--{val_loss:.5f}.hdf5' 
checkpoint = ModelCheckpoint(checkpoint_name, monitor='val_loss', verbose = 0, save_best_only = True, mode ='auto')
callbacks_list = [checkpoint]

model.fit(train_imgs, train_labls, epochs=20, batch_size=32, validation_split = 0.2, callbacks=callbacks_list)

predictions = model.predict(test_imgs) # make predictions on same test set!

現在,我知道我將遺漏層,但是我想讓CNN適應我的數據,這時我只想讓它做任何事情。 當我對同一組圖像進行預測時,希望能得到准確的結果,不是嗎? 我不太確定自己缺少什么。 謝謝您的幫助!

首先,用'sigmoid'代替'softmax' 'sigmoid'

Sigmoid將使三個輸出的范圍從0到1。另請注意,將softmax用於分類。 它嘗試僅使三個值之一最大化,並且三個值的總和將始終為1。

其次,如果您的損失被完全凍結,則問題可能出在'relu' (relu具有恆定的零區域,其中沒有梯度)。 您可以用'sigmoid''tanh'類的其他東西替換'relu ”,也可以在BatchNormalization()之前添加BatchNormalization()層。

作為一個開始的選擇,我總是更喜歡使用optimizer='adam' ,這通常比SGD快得多,並且您不需要太在意學習率(當然,高級模型和最佳結果可能需要調整)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM