Keras预测返回的值很小

时间:2019-06-07 22:43:22

标签: tensorflow keras neural-network

我是神经网络的初学者。我创建了一个神经网络来识别15个目标(类)的耳朵。该数据集由300张图像组成,分为“训练”,“验证”和“测试”。对于训练中的每个班级,都有13张图像,用于验证3和用于测试4。

这是网络的结构

select * 
from tablea ta 
where NOT EXIST (
     select 1 
      from tableb tb 
     where ta.col1 = tb.col1
          and ta.col2 = tb.col2
          and ta.col3 = tb.col3)

我相信历元数很高,但是如果我尝试减少它,那么准确性会降低。无论如何,当我尝试预测从测试集中拍摄的图像时,结果得到的值很小。我不知道为什么会这样。我需要0到1之间的值。我不知道这是由于模型的结构还是其他原因引起的问题。

input_shape = (128, 128, 3)
NUM_CLASSES = 15
BATCH_SIZE = 32
NUM_EPOCHE = 50

classifier = Sequential()
classifier.add(Convolution2D(32, 3, 3, input_shape = input_shape, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dropout(.5))
classifier.add(Dense(output_dim = 128, activation = 'relu'))
classifier.add(Dropout(.5))
classifier.add(Dense(output_dim = NUM_CLASSES, activation = 'softmax'))

classifier.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])

classifier.fit_generator(
training_set,
steps_per_epoch = 6,  
epochs = NUM_EPOCHE,
validation_data = validation_set,
validation_steps = 2, 
) 

这是预测结果:

x = image.load_img('dataset_biometria/ear/test_set/15/02_15_06.jpg',      target_size=(128,128))
x = image.img_to_array(x)
x = x.reshape((1,) + x.shape)
x = x/255
predictions = classifier.predict_proba(x, batch_size=32, verbose=1)
print(predictions)

2 个答案:

答案 0 :(得分:0)

应该是这样,所有值都在零到一之间,并且总和为1,这是由softmax函数产生的,因此这里没有问题,只是一个误解。

答案 1 :(得分:0)

您得到的是每班概率。如果对这些值求和,结果将是1.0,这是预期的。例如:

per_class_probabilities = [[5.6861238e-05, 2.6912585e-02, 5.8105786e-04, 1.7117772e-03, 1.5182612e-03, 1.5271029e-01, 3.7086603e-01, 3.7264896e-03, 1.0833447e-03, 8.4272223e-03, 2.5183004e-03, 5.6781149e-03, 3.8425636e-02, 3.8328120e-01, 2.5028707e-03]]
print(np.sum(per_class_probabilities))
# 1.0

然后,如果您想获得最可能的类别,即预测:

class_prediction = np.argmax(per_class_probabilities)
print(class_prediction)
# 13