the*_*ech 6 python deep-learning keras
我正在使用一组图像训练类似VGG的信号网(如示例http://keras.io/examples/).我将图像转换为数组并使用scipy调整它们的大小:
mapper = [] # list of photo ids
data = np.empty((NB_FILES, 3, 100, 100)).astype('float32')
i = 0
for f in onlyfiles[:NB_FILES]:
img = load_img(mypath + f)
a = img_to_array(img)
a_resize = np.empty((3, 100, 100))
a_resize[0,:,:] = sp.misc.imresize(a[0,:,:], (100,100)) / 255.0 # - 0.5
a_resize[1,:,:] = sp.misc.imresize(a[1,:,:], (100,100)) / 255.0 # - 0.5
a_resize[2,:,:] = sp.misc.imresize(a[2,:,:], (100,100)) / 255.0 # - 0.5
photo_id = int(f.split('.')[0])
mapper.append(photo_id)
data[i, :, :, :] = a_resize; i += 1
Run Code Online (Sandbox Code Playgroud)
在最后一个致密层中,我有2个神经元,我用softmax激活.以下是最后一行:
model.add(Dense(2))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)
model.fit(data, target_matrix, batch_size=32, nb_epoch=2, verbose=1, show_accuracy=True, validation_split=0.2)
Run Code Online (Sandbox Code Playgroud)
我无法改善减少损失,每个时代都有与以前相同的损失和精度.损失实际上在第1和第2纪元之间上升:
Train on 1600 samples, validate on 400 samples
Epoch 1/5
1600/1600 [==============================] - 23s - loss: 3.4371 - acc: 0.7744 - val_loss: 3.8280 - val_acc: 0.7625
Epoch 2/5
1600/1600 [==============================] - 23s - loss: 3.4855 - acc: 0.7837 - val_loss: 3.8280 - val_acc: 0.7625
Epoch 3/5
1600/1600 [==============================] - 23s - loss: 3.4855 - acc: 0.7837 - val_loss: 3.8280 - val_acc: 0.7625
Epoch 4/5
1600/1600 [==============================] - 23s - loss: 3.4855 - acc: 0.7837 - val_loss: 3.8280 - val_acc: 0.7625
Epoch 5/5
1600/1600 [==============================] - 23s - loss: 3.4855 - acc: 0.7837 - val_loss: 3.8280 - val_acc: 0.7625
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
根据我的经验,当学习率太高时,这种情况经常发生。优化将无法找到最小值,只能“掉头”。
理想的速率取决于您的数据和网络架构。
(作为参考,我目前正在运行一个 8 层的卷积网络,样本大小与您的相似,并且可以观察到同样缺乏收敛,直到我将学习率降低到 0.001)