Функция Softmax выводит числа, которые представляют вероятности, значение каждого числа находится в диапазоне от 0 до 1 допустимого диапазона значений вероятностей. Диапазон обозначается как [0,1]. Числа равны нулю или положительны. Весь выходной вектор соответствует сумме 1.
argmax Возвращает индексы максимальных значений вдоль оси.
Так что напечатайте свои этикетки и поймите что представляют собой ваш первый и второй индексы?
Поскольку вы использовали softmax в своем последнем слое, он дает вероятность того, что изображение принадлежит различным классам. В вашем случае это 2 класса, поэтому он показывает вероятность изображения, принадлежащего этим двум классам. Если вы суммируете свои вероятности 0,9550967 и 0,04490325, сумма будет равна 1.
0.9550967 + 0.04490325 = 1
np.argmax(rslt)
возвращает индексы, имеющие максимальное значение.
Вот пример (1 ) - Распечатайте этикетки и поймите, что представляют собой первый и второй индексы -
import numpy as np
from sklearn.preprocessing import LabelBinarizer
from tensorflow.keras.utils import to_categorical
# define example
data = ['dog', 'dog', 'cat', 'dog', 'cat', 'cat', 'dog', 'cat', 'dog', 'dog']
values = np.array(data)
#Binary encode
lb = LabelBinarizer()
labels = lb.fit_transform(values)
labels = to_categorical(labels)
print("which position represents for cat and dog?:")
print("Data is:",data)
print(labels)
Вывод будет - Здесь первый индекс для кошки, а второй для собаки.
which position represents for cat and dog?:
Data is: ['dog', 'dog', 'cat', 'dog', 'cat', 'cat', 'dog', 'cat', 'dog', 'dog']
[[0. 1.]
[0. 1.]
[1. 0.]
[0. 1.]
[1. 0.]
[1. 0.]
[0. 1.]
[1. 0.]
[0. 1.]
[0. 1.]]
Теперь давайте разберем argmax с вашими значениями softmax array([[0.9550967 , 0.04490325]]
Пример (2): Будет принимать ваш вывод softmax как это.
import numpy as np
rslt = np.array([[0.9550967,0.04490325]])
rslt = np.argmax(rslt)
print(rslt)
Выходные данные должны давать 0, поскольку первый индекс имеет более высокое значение. Таким образом, его Cat в соответствии с приведенным выше примером (1).
0
Пример (3): Поменяет ваш выход softmax.
import numpy as np
rslt = np.array([[0.04490325,0.9550967]])
rslt = np.argmax(rslt)
print(rslt)
Выходные данные должны давать 1, поскольку второй индекс имеет более высокое значение. То есть его Собака в соответствии с вышеприведенным примером (1).
1