to_categorical的用法

to_categorical

to_categorical(y, num_classes=None)

将类别向量(从0到nb_classes的整数向量)映射为二值类别矩阵, 用于应用到以categorical_crossentropy为目标函数的模型中.

参数

  • y: 类别向量
  • num_classes:总共类别数

to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示。其表现为将原有的类别向量转换为独热编码的形式。

1、先上代码看一下效果:

from keras.utils.np_utils import *
#类别向量定义
b = [0,1,2,3,4,5,6,7,8,9]
#调用to_categorical将b按照10个类别来进行转换
b = to_categorical(b, 10)
b 
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]], dtype=float32)

注意:在调用to_categorical时给了两个参数,一个是向量b,另外一个是要求其按照10个类别来生成独热编码。

如果将代码改为下面这样

#此处只有4个数据类型
c = [0,1,2,3]
c = to_categorical(c) #这里并没有给出类型参数4
c 

其运行结果为:

array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]], dtype=float32)

也就是如果我们不给出第二个参数,该方法会自动根据输入向量判断类型

2、通过手写数字识别来介绍一下:

from keras import layers
from keras.utils import to_categorical
import tensorflow as tf
import numpy as np

 

首先将MNIST数据集加载到keras中

from keras.datasets import mnist

这个数据集分为训练集和测试集

(train_images,train_labels),(test_images,test_labels)=mnist.load_data()

看一下训练集中数据量

train_images.shape

Out[4]:(60000, 28, 28)

训练集标签的数据

train_labels.shape
(60000,)
train_labels
array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)
训练集的标签
train_labels=to_categorical(train_labels)
train_labels.shape
(60000, 10)

注意:上一步中,调用to_categorical()时,我们只给出了一个向量参数train_labels,并没有告诉它需要分为几个类型,但是它最后自动根据结果生成10个类型

再来看看标签

train_labels
array([[0., 0., 0., ..., 0., 0., 0.],
       [1., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 1., 0.]], dtype=float32)

 

 

 

你可能感兴趣的:(深度学习)