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线程中对join方法的运用的教程
Apr 09 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
python unittest实现api自动化测试
Apr 04 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
python仿抖音表白神器
Apr 08 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
django如何自己创建一个中间件
Jul 24 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python数据处理之Pandas类型转换
Apr 28 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+java实现自动新闻滚动窗口
2006/10/09 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
python实现图片变亮或者变暗的方法
2015/06/01 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
python制作填词游戏步骤详解
2019/05/05 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
店长岗位的工作内容
2013/11/12 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
送给客户微信问候语!
2019/07/04 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL