基于多层感知器 (MLP) 的 softmax 多分类代码详解

由于keras学习中涉及到很多python统计类型的函数,为了方便大家学习,对部分代码进行详细解说。

代码

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

# 生成虚拟数据
import numpy as np
x_train = np.random.random((1000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
x_test = np.random.random((100, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)), num_classes=10)

model = Sequential()
# Dense(64) 是一个具有 64 个隐藏神经元的全连接层。
# 在第一层必须指定所期望的输入数据尺寸:
# 在这里,是一个 20 维的向量。
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=20,
          batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
np.random.random((1000, 20))

生成一个1000x20的矩阵,矩阵中每个数值取值[0.0, 1.0)

每行是20个数值。第一个中括号表示是1000行,里面的每个中括号表示每行20个数值(或20列)。

例如:np.random.random((2, 20))

 [[0.76864065 0.16544777 0.91225942 0.96979709 0.97639038 0.81960567
  0.10791369 0.14690604 0.295259   0.94330635 0.72380199 0.65406781
  0.39281451 0.36129603 0.41686626 0.02929583 0.61383308 0.76576476
  0.96673321 0.20488361]
 [0.34531702 0.36220246 0.24123767 0.49511975 0.11214061 0.07556306
  0.34616241 0.32386213 0.95908638 0.70804342 0.20851361 0.02748738
  0.26976578 0.8293944  0.76263526 0.19507013 0.84914938 0.71675057
  0.79020945 0.12766118]]

参考:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.random.html

np.random.randint(10, size=(100, 1)

随机生成100x1的矩阵。其中每个数值取值[0,10)正整数(0、1、2...9)

例如:np.random.randint(10, size=(5, 1)

 [[2]
 [5]
 [2]
 [4]
 [5]]

参考:https://www.orchome.com/1568

keras.utils.to_categorical(np.random.randint(10, size=(2, 1)), num_classes=10)

1.先生成2x1的矩阵,矩阵中每个数值取值[0,10)中的正整数。

[[6]
 [0]]

2.矩阵中每行转化为一类(一共分为10类)

 [[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

 

你可能感兴趣的:(基于多层感知器 (MLP) 的 softmax 多分类代码详解)