在《python深度學習》這本書中。
一、21頁mnist十分類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
導入數據集 (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。
數據預處理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 將整數序列編碼為二進制矩陣 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.第一種,普通的不用數據增強的
1
2
3
4
|
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,可以旋轉角度、平移等操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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分類模型中的輸入數據與標簽的維度實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/xiaohuihui1994/article/details/83536752