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抓取模板之家的CSS模板
Mar 16 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
Python实现DDos攻击实例详解
Feb 02 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
Python 日志logging模块用法简单示例
Oct 18 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
Python unittest discover批量执行代码实例
Sep 08 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Django 实现jwt认证的示例
Apr 30 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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去除二维数组的重复项方法
2015/11/03 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
JS获取后台Cookies值的小例子
2013/03/04 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
使用python绘制二维图形示例
2019/11/22 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
2013年军训通讯稿
2014/02/05 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
项目负责人任命书
2014/06/04 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
自我工作评价范文
2015/03/06 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python