keras分类模型中的输入数据与标签的维度实例

作者:xytywh 时间:2022-01-30 02:12:43 

在《python深度学习》这本书中。

一、21页mnist十分类


导入数据集
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

初始数据维度:
>>> train_images.shape
(60000, 28, 28)
>>> len(train_labels)
60000
>>> train_labels
array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)

数据预处理:
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
train_labels = to_categorical(train_labels)

之后:
print(train_images, type(train_images), train_images.shape, train_images.dtype)
print(train_labels, type(train_labels), train_labels.shape, train_labels.dtype)
结果:
[[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. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]] <class 'numpy.ndarray'> (60000, 784) float32
[[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.]] <class 'numpy.ndarray'> (60000, 10) float32

二、51页IMDB二分类

导入数据:

from keras.datasets import imdb (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

参数 num_words=10000 的意思是仅保留训练数据中前 10 000 个最常出现的单词。

train_data和test_data都是numpy.ndarray类型,都是一维的(共25000个元素,相当于25000个list),其中每个list代表一条评论,每个list中的每个元素的值范围在0-9999 ,代表10000个最常见单词的每个单词的索引,每个list长度不一,因为每条评论的长度不一,例如train_data中的list最短的为11,最长的为189。

train_labels和test_labels都是含25000个元素(元素的值要不0或者1,代表两类)的list。

数据预处理:


# 将整数序列编码为二进制矩阵
def vectorize_sequences(sequences, dimension=10000):
# Create an all-zero matrix of shape (len(sequences), dimension)
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
 results[i, sequence] = 1. # set specific indices of results[i] to 1s
return results

x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)

第一种方式:shape为(25000,)
y_train = np.asarray(train_labels).astype('float32') #就用这种方式就行了
y_test = np.asarray(test_labels).astype('float32')
第二种方式:shape为(25000,1)
y_train = np.asarray(train_labels).astype('float32').reshape(25000, 1)
y_test = np.asarray(test_labels).astype('float32').reshape(25000, 1)
第三种方式:shape为(25000,2)
y_train = to_categorical(train_labels) #变成one-hot向量
y_test = to_categorical(test_labels)

第三种方式,相当于把二分类看成了多分类,所以网络的结构同时需要更改,

最后输出的维度:1->2

最后的激活函数:sigmoid->softmax

损失函数:binary_crossentropy->categorical_crossentropy

预处理之后,train_data和test_data变成了shape为(25000,10000),dtype为float32的ndarray(one-hot向量),train_labels和test_labels变成了shape为(25000,)的一维ndarray,或者(25000,1)的二维ndarray,或者shape为(25000,2)的one-hot向量。

注:

1.sigmoid对应binary_crossentropy,softmax对应categorical_crossentropy

2.网络的所有输入和目标都必须是浮点数张量

补充知识:keras输入数据的方法:model.fit和model.fit_generator

1.第一种,普通的不用数据增强的


from keras.datasets import mnist,cifar10,cifar100
(X_train, y_train), (X_valid, Y_valid) = cifar10.load_data()
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, shuffle=True,
   verbose=1, validation_data=(X_valid, Y_valid), )

2.第二种,带数据增强的 ImageDataGenerator,可以旋转角度、平移等操作。


from keras.preprocessing.image import ImageDataGenerator
(trainX, trainY), (testX, testY) = cifar100.load_data()
trainX = trainX.astype('float32')
testX = testX.astype('float32')
trainX /= 255.
testX /= 255.
Y_train = np_utils.to_categorical(trainY, nb_classes)
Y_test = np_utils.to_categorical(testY, nb_classes)
generator = ImageDataGenerator(rotation_range=15,
       width_shift_range=5./32,
       height_shift_range=5./32)
generator.fit(trainX, seed=0)
model.fit_generator(generator.flow(trainX, Y_train, batch_size=batch_size),
    steps_per_epoch=len(trainX) // batch_size, epochs=nb_epoch,
    callbacks=callbacks,
    validation_data=(testX, Y_test),
    validation_steps=testX.shape[0] // batch_size, verbose=1)

来源:https://blog.csdn.net/xiaohuihui1994/article/details/83536752

标签:keras,分类,模型,标签,维度
0
投稿

猜你喜欢

  • 网站大改版=壮烈的死亡 ?

    2009-04-03 14:09:00
  • python 执行shell命令并将结果保存的实例

    2023-07-27 20:34:52
  • 深入理解Python3 内置函数大全

    2022-06-27 22:11:36
  • python 将日期戳(五位数时间)转换为标准时间

    2021-09-14 06:36:47
  • python通过pil为png图片填充上背景颜色的方法

    2021-03-01 07:32:38
  • 使用python实现定时报天气的示例代码

    2021-12-27 14:56:10
  • python快速查找算法应用实例

    2021-04-17 10:28:13
  • 用书的概念理解小网站结构

    2007-10-31 18:08:00
  • HTML5硝烟弥漫

    2009-07-06 14:44:00
  • sqlserver 数据库压缩与数据库日志(ldf)压缩方法分享

    2024-01-17 12:33:46
  • Python matplotlib读取excel数据并用for循环画多个子图subplot操作

    2021-03-28 19:17:31
  • asp如何用WSH获取机器的IP配置信息?

    2010-06-13 14:39:00
  • mysql 实现互换表中两列数据方法简单实例

    2024-01-24 07:11:04
  • python第三方异步日志库loguru简介

    2022-03-25 14:34:23
  • Golang算法问题之整数拆分实现方法分析

    2023-07-01 00:39:36
  • python3 cmp实现方式

    2023-12-13 18:10:25
  • python中正则的使用指南

    2023-09-10 18:24:51
  • python使用response.read()接收json数据的实例

    2021-09-16 08:08:01
  • ASP FSO显示特殊文件夹的实现代码(畸形目录名、UNC路径)

    2012-11-30 20:10:46
  • Pycharm debug调试时带参数过程解析

    2023-02-27 06:21:00
  • asp之家 网络编程 m.aspxhome.com