【Tool】Keras 基礎(chǔ)學(xué)習(xí) VII 多分類(lèi)

多分類(lèi)問(wèn)題和二分類(lèi)問(wèn)題差不多仇参,主要區(qū)別在于原來(lái)的二分類(lèi)0,1 label不適用于多分類(lèi)。因此需要使用one-hot-encoding:
如single label三個(gè)類(lèi)別為:

[1,0,0]
[0,1,0]
[0,0,1]

如果是multi-label同一樣本label有可能有多個(gè)1.
這里同樣使用keras中自帶的Reuters數(shù)據(jù)集舉一個(gè)例子, Reuter數(shù)據(jù)一共有46個(gè)topic也就是label one-hot-encoding長(zhǎng)度為46, 最后網(wǎng)絡(luò)的輸出數(shù)目也應(yīng)該是46, loss換成categorical_crossentropy蚜印,類(lèi)別交叉熵。

import os
import numpy as np
from keras.models import Sequential, Model
from keras import layers
from keras.preprocessing.image import ImageDataGenerator
from keras import optimizers
from keras.applications.vgg16 import VGG16
from keras.utils.np_utils import to_categorical
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt
from keras.datasets import imdb
from keras.datasets import reuters

(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)
word_index = reuters.get_word_index()
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)

def vectorize_sequences(sequences, dimension=10000):
    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)

y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')

model = Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(46, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

x_val = x_train[:1000]
partial_x_train = x_train[1000:]
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size=512, validation_data=(x_val, y_val))

metrics = model.evaluate(x_test, one_hot_test_labels)
print(model.metrics_names)
print(metrics)
# 輸出
Using TensorFlow backend.
Train on 7982 samples, validate on 1000 samples
Epoch 1/20
2018-09-25 17:50:28.607256: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
7982/7982 [==============================] - 2s 207us/step - loss: 2.2137 - acc: 0.5355 - val_loss: 1.4747 - val_acc: 0.6730
Epoch 2/20
7982/7982 [==============================] - 1s 154us/step - loss: 1.1720 - acc: 0.7521 - val_loss: 1.1329 - val_acc: 0.7660
Epoch 3/20
7982/7982 [==============================] - 1s 133us/step - loss: 0.8195 - acc: 0.8314 - val_loss: 1.0061 - val_acc: 0.7970
Epoch 4/20
7982/7982 [==============================] - 1s 134us/step - loss: 0.6025 - acc: 0.8770 - val_loss: 0.9740 - val_acc: 0.7870
Epoch 5/20
7982/7982 [==============================] - 1s 134us/step - loss: 0.4549 - acc: 0.9052 - val_loss: 0.8888 - val_acc: 0.8080
Epoch 6/20
7982/7982 [==============================] - 1s 134us/step - loss: 0.3475 - acc: 0.9277 - val_loss: 0.8772 - val_acc: 0.8180
Epoch 7/20
7982/7982 [==============================] - 1s 133us/step - loss: 0.2795 - acc: 0.9364 - val_loss: 0.9021 - val_acc: 0.8190
Epoch 8/20
7982/7982 [==============================] - 1s 134us/step - loss: 0.2254 - acc: 0.9468 - val_loss: 0.9798 - val_acc: 0.7900
Epoch 9/20
7982/7982 [==============================] - 1s 134us/step - loss: 0.1910 - acc: 0.9499 - val_loss: 0.9128 - val_acc: 0.8140
Epoch 10/20
7982/7982 [==============================] - 1s 133us/step - loss: 0.1691 - acc: 0.9548 - val_loss: 0.9675 - val_acc: 0.8050
Epoch 11/20
7982/7982 [==============================] - 1s 134us/step - loss: 0.1540 - acc: 0.9545 - val_loss: 0.9605 - val_acc: 0.8170
Epoch 12/20
7982/7982 [==============================] - 1s 132us/step - loss: 0.1378 - acc: 0.9555 - val_loss: 0.9347 - val_acc: 0.8250
Epoch 13/20
7982/7982 [==============================] - 1s 131us/step - loss: 0.1351 - acc: 0.9567 - val_loss: 0.9875 - val_acc: 0.8030
Epoch 14/20
7982/7982 [==============================] - 1s 132us/step - loss: 0.1280 - acc: 0.9574 - val_loss: 1.0115 - val_acc: 0.8100
Epoch 15/20
7982/7982 [==============================] - 1s 132us/step - loss: 0.1184 - acc: 0.9577 - val_loss: 1.0212 - val_acc: 0.8090
Epoch 16/20
7982/7982 [==============================] - 1s 132us/step - loss: 0.1185 - acc: 0.9567 - val_loss: 1.1065 - val_acc: 0.7890
Epoch 17/20
7982/7982 [==============================] - 1s 131us/step - loss: 0.1114 - acc: 0.9593 - val_loss: 1.0736 - val_acc: 0.8020
Epoch 18/20
7982/7982 [==============================] - 1s 131us/step - loss: 0.1130 - acc: 0.9573 - val_loss: 1.0855 - val_acc: 0.8030
Epoch 19/20
7982/7982 [==============================] - 1s 131us/step - loss: 0.1092 - acc: 0.9590 - val_loss: 1.1403 - val_acc: 0.8020
Epoch 20/20
7982/7982 [==============================] - 1s 131us/step - loss: 0.1078 - acc: 0.9604 - val_loss: 1.0871 - val_acc: 0.8020
2246/2246 [==============================] - 0s 172us/step
['loss', 'acc']
[1.2606438883478261, 0.780498664345151]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遭赂,一起剝皮案震驚了整個(gè)濱河市摘符,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拷淘,老刑警劉巖各墨,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異启涯,居然都是意外死亡贬堵,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)结洼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黎做,“玉大人,你說(shuō)我怎么就攤上這事松忍≌舻睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鸣峭,是天一觀的道長(zhǎng)宏所。 經(jīng)常有香客問(wèn)我,道長(zhǎng)摊溶,這世上最難降的妖魔是什么爬骤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮更扁,結(jié)果婚禮上盖腕,老公的妹妹穿的比我還像新娘。我一直安慰自己浓镜,他們只是感情好溃列,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著膛薛,像睡著了一般听隐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哄啄,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天雅任,我揣著相機(jī)與錄音风范,去河邊找鬼。 笑死沪么,一個(gè)胖子當(dāng)著我的面吹牛硼婿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禽车,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寇漫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了殉摔?” 一聲冷哼從身側(cè)響起州胳,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逸月,沒(méi)想到半個(gè)月后栓撞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碗硬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年瓤湘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肛响。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岭粤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出特笋,到底是詐尸還是另有隱情,我是刑警寧澤巾兆,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布猎物,位于F島的核電站,受9級(jí)特大地震影響角塑,放射性物質(zhì)發(fā)生泄漏蔫磨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一圃伶、第九天 我趴在偏房一處隱蔽的房頂上張望堤如。 院中可真熱鬧,春花似錦窒朋、人聲如沸搀罢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榔至。三九已至,卻和暖如春欺劳,著一層夾襖步出監(jiān)牢的瞬間唧取,已是汗流浹背铅鲤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枫弟,地道東北人邢享。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像淡诗,于是被迫代替她去往敵國(guó)和親驼仪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容