我目前正在研究一个图像识别问题,我想以最高的概率识别图像,这意味着期望是从给定输入测试图像的图像池中匹配匹配分数百分比最大的图像。 / p>
我想要任何想法,建议或任何博客文章,我可以通过它们继续前进。
如果要求不清楚,请告知我,我将提供所有细节。
classifier = Sequential()
classifier.add(Conv2D(32,(3,3), input_shape =(600,200,3),
activation ='relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))
classifier.add(Conv2D(32,(3,3), activation ='relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation ='relu'))
classifier.add(Dropout(0.4))
classifier.add(Dense(units = 64, activation ='relu'))
classifier.add(Dense(units = 3, activation ='softmax'))
classifier.compile(optimizer = 'adam', loss =
'categorical_crossentropy', metrics =['accuracy'])
#Testing
img_width, img_height = 600, 200
def prediction(file):
x = load_img(file, target_size=(img_width,img_height))
x = img_to_array(x)
x = np.expand_dims(x, axis=0)
array = classifier.predict(x)
result = array[0]
#print(result)
answer = np.argmax(result)
if answer == 1:
print("Predicted: Dog")
elif answer == 0:
print("Predicted: Cat")
elif answer == 2:
print("Predicted: Materials")
我想要这样的输出,给定一个图像,它应该告诉我它属于哪个类别的概率,例如狗:23%,猫:2%,材料:75%
答案 0 :(得分:0)
您可以做的是在输出层节点上使用S形传递函数(该函数接受数据范围(-inf,inf)并输出[-1,1]中的值)。 然后,使用n中的1-输出编码(每个类一个节点),您可以将范围[-1,1]映射到[0,1]并将其用作每个类值的概率(请注意,这是可行的当然不只是两个班级。
您可以在此处了解更多信息,包括概率解释的证明:
[1] Bishop,Christopher M.用于模式识别的神经网络。牛津大学出版社,1995年。
简单示例
如果您希望将概率作为网络的输出,则可以在softmax
层之后使用Dense
。
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# probability array
probabilities = model.predict(image)[0]
# get predicted classes
pred_classes = np.argmax(probabilities)