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爬虫神器Beautiful Soup用法
Jan 20 Python
基于python socketserver框架全面解析
Sep 21 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
Django 响应数据response的返回源码详解
Aug 06 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 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+html5+ajax实现上传图片的方法
2016/05/14 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
JSON相关知识汇总
2015/07/03 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python使用wxPython实现计算器
2018/01/30 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python实现输入数字的连续加减方法
2018/06/22 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
临床医学系毕业生推荐信
2013/11/09 职场文书
大型晚会策划方案
2014/02/06 职场文书
总经理任命书
2014/03/29 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
迎国庆横幅标语
2014/10/08 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript