參考鏈接:https://blog.csdn.net/nima1994/article/details/82468965
參考鏈接:https://blog.csdn.net/gdl3463315/article/details/82659378
to_categorical(y, num_classes=None, dtype='float32')
將整型的類別標簽轉為onehot編碼。y為int數組,num_classes為標簽類別總數,大於max(y)(標簽從0開始的)。
返回:如果num_classes=None,返回len(y) * [max(y)+1](維度,m*n表示m行n列矩陣,下同),否則為len(y) * num_classes。
-
import keras
-
-
ohl=keras.utils.to_categorical([ 1,3])
-
# ohl=keras.utils.to_categorical([[1],[3]])
-
print(ohl)
-
"""
-
[[0. 1. 0. 0.]
-
[0. 0. 0. 1.]]
-
"""
-
ohl=keras.utils.to_categorical([ 1,3],num_classes=5)
-
print(ohl)
-
"""
-
[[0. 1. 0. 0. 0.]
-
[0. 0. 0. 1. 0.]]
-
"""
該部分keras源碼如下:
-
def to_categorical(y, num_classes=None, dtype='float32'):
-
"""Converts a class vector (integers) to binary class matrix.
-
-
E.g. for use with categorical_crossentropy.
-
-
# Arguments
-
y: class vector to be converted into a matrix
-
(integers from 0 to num_classes).
-
num_classes: total number of classes.
-
dtype: The data type expected by the input, as a string
-
(`float32`, `float64`, `int32`...)
-
-
# Returns
-
A binary matrix representation of the input. The classes axis
-
is placed last.
-
"""
-
y = np.array(y, dtype= 'int')
-
input_shape = y.shape
-
if input_shape and input_shape[-1] == 1 and len(input_shape) > 1:
-
input_shape = tuple(input_shape[: -1])
-
y = y.ravel()
-
if not num_classes:
-
num_classes = np.max(y) + 1
-
n = y.shape[ 0]
-
categorical = np.zeros((n, num_classes), dtype=dtype)
-
categorical[np.arange(n), y] = 1
-
output_shape = input_shape + (num_classes,)
-
categorical = np.reshape(categorical, output_shape)
-
return categorical
-
簡單來說:**keras.utils.to_categorical函數:是把類別標簽轉換為onehot編碼(categorical就是類別標簽的意思,表示現實世界中你分類的各類別), 而onehot編碼是一種方便計算機處理的二元編碼。**