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


Posted in Python onJuly 03, 2020

在《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)

以上这篇keras分类模型中的输入数据与标签的维度实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
tensorflow实现逻辑回归模型
Sep 08 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
python生成随机红包的实例写法
Sep 02 Python
python计算二维矩形IOU实例
Jan 18 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
python实现自动清理重复文件
Aug 24 Python
python之随机数函数的实现示例
Dec 30 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 #Python
Python with语句用法原理详解
Jul 03 #Python
Keras搭建自编码器操作
Jul 03 #Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 #Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 #Python
keras topN显示,自编写代码案例
Jul 03 #Python
python如何使用代码运行助手
Jul 03 #Python
You might like
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
php批量修改表结构实例
2017/05/24 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
JQuery中的事件及动画用法实例
2015/01/26 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
一文了解Vue中的nextTick
2019/05/06 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python ip正则式
2009/05/07 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python gevent协程切换实现详解
2020/09/14 Python
python中K-means算法基础知识点
2021/01/25 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
大一期末自我鉴定
2013/12/13 职场文书
班主任寄语大全
2014/04/04 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
社团个人总结范文
2015/03/05 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
签约仪式致辞
2015/07/30 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python