为什么从训练开始我的准确度很高?

时间:2017-09-06 15:25:04

标签: deep-learning keras

我正在训练一个神经网络,以识别.png图片上的一些属性,以及我开始训练时得到的东西是这样的,并且它一直在增加,直到纪元结束:

32/4817 [..............................] - ETA: 167s - loss: 0.6756 - acc: 0.5
64/4817 [..............................] - ETA: 152s - loss: 0.6214 - acc: 0.7  
96/4817 [..............................] - ETA: 145s - loss: 0.6169 - acc: 0.7 
128/4817 [.............................] - ETA: 142s - loss: 0.5972 - acc: 0.7 
160/4817 [.............................] - ETA: 140s - loss: 0.5734 - acc: 0.7 
192/4817 [>............................] - ETA: 138s - loss: 0.5604 - acc: 0.7 
224/4817 [>............................] - ETA: 137s - loss: 0.5427 - acc: 0.7 
256/4817 [>............................] - ETA: 135s - loss: 0.5160 - acc: 0.7 
288/4817 [>............................] - ETA: 134s - loss: 0.5492 - acc: 0.7 
320/4817 [>............................] - ETA: 133s - loss: 0.5574 - acc: 0.7 
352/4817 [=>...........................] - ETA: 131s - loss: 0.5559 - acc: 0.7 
384/4817 [=>...........................] - ETA: 129s - loss: 0.5550 - acc: 0.7 
416/4817 [=>...........................] - ETA: 128s - loss: 0.5504 - acc: 0.7 
448/4817 [=>...........................] - ETA: 127s - loss: 0.5417 - acc: 0.7 
480/4817 [=>...........................] - ETA: 126s - loss: 0.5425 - acc: 0.7 

我的问题是为什么起始准确度如此之高?我想它应该是0.1左右,然后在学习的同时增加。

另外,最后我得到:

('Test loss:', 0.42451223436727564)
('Test accuracy:', 0.82572614112830256)

这是一次太大的测试损失吗?

这是我的网络:

input_shape = x_train[0].shape
print(input_shape)
model = Sequential()

stoplearn = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, 
patience=0, verbose=0, mode='auto')

model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=20,
          verbose=1,
          validation_data=(x_test, y_test),
          callbacks=[stoplearn])
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

使用Keras用Python编写。

2 个答案:

答案 0 :(得分:5)

您将数据分为两类(因为您的输出图层大小为2),因此精度为0.5并不高。实际上,这意味着您的网络随机运行,这是您在开始时所期望的。关于损失,没有绝对的答案。您的测试精度似乎并不差,您可以尝试使用某些参数(例如,为完全连接的图层调整较小的尺寸),看看是否可以改进它。

答案 1 :(得分:1)

你有两节课。随机选择将导致50%的准确性。这是你在一开始就得到的。因此,您的结果是预期的。

它直接跳到70%准确度的原因可能是你的问题很简单。

如果你想仔细检查一下,你可以

  1. 使用其他分类器,
  2. 检查用于计算准确度的示例,
  3. 序列化经过培训的分类器,并使用新示例手动提供并检查其结果