Неожиданные значения прогнозирования, tflearn

#python-3.x #tensorflow

#python-3.x #тензорный поток

Вопрос:

Используя tflearn, я пытаюсь классифицировать изображения.

Мой код

 import tflearn
dataset_file = 'my_dataset.txt'

X, Y = tflearn.data_utils.image_preloader(dataset_file, image_shape=(128, 128),categorical_labels=True, mode='file', grayscale=True,  normalize=True)

net = tflearn.input_data(shape=(128,128))
net = tflearn.fully_connected(net, 2, activation='linear')
net = tflearn.regression(net, optimizer='adam', loss='categorical_crossentropy')

model = tflearn.DNN(net, tensorboard_verbose=3)
model.fit(X, Y)

print(model.predict(X))
 

Файл набора данных выглядит следующим образом:

 1.jpg 1
2.jpg 1
3.jpg 1
4.jpg 1
5.jpg 0
6.jpg 0
7.jpg 0
 

…где 1 и 0 — классы изображений.

Однако мои прогнозы не соответствуют моим ожиданиям:

 [[2.9711711406707764, -3.049826145172119], [9.435855865478516, -11.466367721557617], [-3.7774205207824707, -4.090094089508057], [-7.006657600402832, -3.4418578147888184], [-18.654706954956055, -0.9354709982872009], [-17.237045288085938, -3.1278553009033203], [-18.066274642944336, -1.6454157829284668]]
 

Я ожидаю увидеть совпадение для типа изображения 1 или 0.
Просто новичок в tflearn, не уверен, что делать.

Комментарии:

1. В tflearn.regression вы пробовали настройку to_one_hot=True, n_classes=2 ?

2. это дает мне ошибку ValueError: невозможно передать значение формы (7, 2) для тензора ‘TargetsData / Y: 0’, который имеет форму ‘(?,)’

Ответ №1:

Попробуйте изменить свой fully_connected слой, чтобы использовать 'softmax' активацию

 net = tflearn.fully_connected(net, 2, activation='softmax')
 

Теперь вы должны получать выходные данные формы:

 predictions = [[0.999962568283081, 3.739727253559977e-05],
               [0.999962568283081, 3.739727253559977e-05],
               ...]
 

Вот predictions[i][j] вероятность того, что ith элемент в тестовом наборе имеет класс j . Вы заметите, что для всех i sum(predictions[i]) == 1.0

Комментарии:

1. Сумма прогнозов [i] не может быть равна 1, поскольку первые 2 i равны приблизительно 0,999.

2. sum([0.999962568283081, 3.739727253559977e-05]) ~ 1.0 это то, что я имел в виду. predictions[i] это список вероятностей для каждого класса.