keras分類模型中的輸入數(shù)據(jù)與標(biāo)簽的維度實(shí)例
在《python深度學(xué)習(xí)》這本書中。
一、21頁(yè)mnist十分類
導(dǎo)入數(shù)據(jù)集
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
初始數(shù)據(jù)維度:
>>> train_images.shape
(60000, 28, 28)
>>> len(train_labels)
60000
>>> train_labels
array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)
數(shù)據(jù)預(yù)處理:
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)
結(jié)果:
[[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頁(yè)IMDB二分類
導(dǎo)入數(shù)據(jù):
from keras.datasets import imdb (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
參數(shù) num_words=10000 的意思是僅保留訓(xùn)練數(shù)據(jù)中前 10 000 個(gè)最常出現(xiàn)的單詞。
train_data和test_data都是numpy.ndarray類型,都是一維的(共25000個(gè)元素,相當(dāng)于25000個(gè)list),其中每個(gè)list代表一條評(píng)論,每個(gè)list中的每個(gè)元素的值范圍在0-9999 ,代表10000個(gè)最常見單詞的每個(gè)單詞的索引,每個(gè)list長(zhǎng)度不一,因?yàn)槊織l評(píng)論的長(zhǎng)度不一,例如train_data中的list最短的為11,最長(zhǎng)的為189。
train_labels和test_labels都是含25000個(gè)元素(元素的值要不0或者1,代表兩類)的list。
數(shù)據(jù)預(yù)處理:
# 將整數(shù)序列編碼為二進(jìn)制矩陣
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)
第三種方式,相當(dāng)于把二分類看成了多分類,所以網(wǎng)絡(luò)的結(jié)構(gòu)同時(shí)需要更改,
最后輸出的維度:1->2
最后的激活函數(shù):sigmoid->softmax
損失函數(shù):binary_crossentropy->categorical_crossentropy
預(yù)處理之后,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對(duì)應(yīng)binary_crossentropy,softmax對(duì)應(yīng)categorical_crossentropy
2.網(wǎng)絡(luò)的所有輸入和目標(biāo)都必須是浮點(diǎn)數(shù)張量
補(bǔ)充知識(shí):keras輸入數(shù)據(jù)的方法:model.fit和model.fit_generator
1.第一種,普通的不用數(shù)據(jù)增強(qiáng)的
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.第二種,帶數(shù)據(jù)增強(qiáng)的 ImageDataGenerator,可以旋轉(zhuǎn)角度、平移等操作。
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分類模型中的輸入數(shù)據(jù)與標(biāo)簽的維度實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows+vscode穿越跳板機(jī)調(diào)試遠(yuǎn)程代碼的圖文教程
本文通過圖文并茂的形式給大家介紹了windows+vscode穿越跳板機(jī)調(diào)試遠(yuǎn)程代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Python3字符串的常用操作方法之修改方法與大小寫字母轉(zhuǎn)化
這篇文章主要介紹了Python3字符串的常用操作方法之修改方法與大小寫字母轉(zhuǎn)化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
利用Python中SocketServer 實(shí)現(xiàn)客戶端與服務(wù)器間非阻塞通信
本文主要介紹了利用Python中SocketServer 實(shí)現(xiàn)客戶端與服務(wù)器間非阻塞通信示例代碼,具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12
Python筆記之a(chǎn) = [0]*x格式的含義及說明
這篇文章主要介紹了Python筆記之a(chǎn) = [0]*x格式的含義及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
Python編程中的文件讀寫及相關(guān)的文件對(duì)象方法講解
這篇文章主要介紹了Python編程中的文件讀寫及相關(guān)的文件對(duì)象方法講解,其中文件對(duì)象方法部分講到了對(duì)文件內(nèi)容的輸入輸出操作,需要的朋友可以參考下2016-01-01
將imagenet2012數(shù)據(jù)為tensorflow的tfrecords格式并跑驗(yàn)證的詳細(xì)過程
這篇文章主要介紹了將imagenet2012數(shù)據(jù)為tensorflow的tfrecords格式并跑驗(yàn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Python實(shí)現(xiàn)自動(dòng)登錄百度空間的方法
這篇文章主要介紹了Python實(shí)現(xiàn)自動(dòng)登錄百度空間的方法,涉及Python的http請(qǐng)求發(fā)送、獲取響應(yīng)、cookie操作等相關(guān)技巧,需要的朋友可以參考下2017-06-06
Python使用pandas模塊實(shí)現(xiàn)表之間的關(guān)聯(lián)
在數(shù)據(jù)分析和處理中,表之間的關(guān)聯(lián)是非常常見的操作,本文為大家介紹了pandas中實(shí)現(xiàn)表之間的關(guān)聯(lián)有四種方式,感興趣的小伙伴可以了解一下2023-07-07

