1. 程式人生 > >keras中的keras.utils.to_categorical方法

keras中的keras.utils.to_categorical方法

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