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 相关文章推荐
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
Python解析json文件相关知识学习
Mar 01 Python
Pycharm设置界面全黑的方法
May 23 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
python config文件的读写操作示例
Sep 27 Python
Python socket模块方法实现详解
Nov 05 Python
django序列化serializers过程解析
Dec 14 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 Python
python中的时区问题
Jan 14 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
如何获取numpy array前N个最大值
May 14 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
用PHP编写PDF文档生成器
2006/10/09 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
Python中turtle库的使用实例
2019/09/09 Python
python Paramiko使用示例
2020/09/21 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
幼儿园老师寄语
2014/04/03 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
采购内勤岗位职责
2015/04/13 职场文书
居委会工作总结2015
2015/05/18 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
投诉信回复范文
2015/07/03 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python