时间:2021-05-22
在《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_labelsarray([5, 0, 4, ..., 5, 6, 8], dtype=uint8)数据预处理:train_images = train_images.reshape((60000, 28 * 28))train_images = train_images.astype('float32') / 255train_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 resultsx_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分类模型中的输入数据与标签的维度实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Mac#数据集~/.keras/datasets/#模型~/.keras/models/Linux#数据集~/.keras/datasets/Windows#w
使用keras实现性别识别,模型数据使用的是oarriaga/face_classification的模型实现效果准备工作在开始之前先要安装keras和tens
问题keras使用预训练模型vgg16分类,损失和准确度不变。细节:使用keras训练一个两类数据,正负比例1:3,在vgg16后添加了几个全链接并初始化了。并
前言感知器是分类的线性分类模型,其中输入为实例的特征向量,输出为实例的类别,取+1或-1的值作为正类或负类。感知器对应于输入空间中对输入特征进行分类的超平面,属
在进行keras网络计算时,有时候需要获取输入张量的维度来定义自己的层。但是由于keras是一个封闭的接口。因此在调用由于是张量不能直接用numpy里的A.sh