【Tool】Keras 基础学习 VII 多分类

多分类问题和二分类问题差不多,主要区别在于原来的二分类0,1 label不适用于多分类。因此需要使用one-hot-encoding:
如single label三个类别为:

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

如果是multi-label同一样本label有可能有多个1.
这里同样使用keras中自带的Reuters数据集举一个例子, Reuter数据一共有46个topic也就是label one-hot-encoding长度为46, 最后网络的输出数目也应该是46, loss换成categorical_crossentropy,类别交叉熵。

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]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容