model.add(Dense(64, activation='relu', input_dim=20))
Dense是一个全连接层,64是指拥有64个隐藏层,在第一层的时候必须标注输入数据类型,也就是这里的input_dim,这是指的一般二维数据的情况下,在三维的时候还要说明input_length,这都是用来指定输入的input_shape的,activation指的就是激活函数应用的是relu。
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
在训练模型之前,我们需要通过compile
来对学习过程进行配置。compile
接收三个参数:
-
优化器optimizer:该参数可指定为已预定义的优化器名,如
rmsprop
、adagrad
,或一个Optimizer
类的对象。这里的优化器用的是SGD也就是梯度递减,这里面的参数: -
- lr:大于0的浮点数,学习率
- momentum:大于0的浮点数,动量参数
- decay:大于0的浮点数,每次更新后的学习率衰减值
- nesterov:布尔值,确定是否使用Nesterov动量
-
损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名,如
categorical_crossentropy
、mse
,也可以为一个损失函数。 -
指标列表metrics:对分类问题,我们一般将该列表设置为
metrics=['accuracy']
。指标可以是一个预定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成metric_name - > metric_value
映射的字典。这里很明显看的就是分类器的准确率。
model.fit(x_train, y_train,
epochs=20,
batch_size=128)
这里面的意思就是模型已经建立好了,需要通过.fit函数来进行训练了,epoches指的是训练的迭代次数。batch就不介绍了,前面博客有说的。
附完整代码:
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
import keras
# Generate dummy data
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) is a fully-connected layer with 64 hidden units.
# in the first layer, you must specify the expected input data shape:
# here, 20-dimensional vectors.
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dense(64, activation='relu'))
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)