上一次的博客中,我学习了使用顺序模型去实现一个网络模型的基本内容。首先我们要线性的堆叠网络层,这里要先使用Sequential构造器来构造一个模型对象,然后使.add()方法去添加网络层,第一层的全连接层一定要指定输入大小。接下来,对模型进行编译,使用.compile()方法配置网络,包含损失函数,优化方法和评估标准三个参数,最后,通过.fit()函数对模型进行训练。这事一个简单的顺序模型过程,下面我们使用keras的顺序模型实现两个简单的小例子。
熟悉神经网络的人都知道多层感知机是怎么一回事,在这里我也不做过多的描述,直接看例子。
from keras.layers import Dense, Dropout, Activation
from keras.models import Sequential
from keras.optimizers import SGD
import keras
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((1000, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10)
# 使用顺序模型搭建网络
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=20)) # 64个神经元的全连接层,输入维度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=50, batch_size=128)
# 评估
score = model.evaluate(x_test, y_test, batch_size=128)
print(score)
import numpy as np
from keras.layers import Dense, Dropout
from keras.models import Sequential
# 生成数据
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))
x_test = np.random.random((100, 20))
y_test = np.random.randint(2, size=(100, 1))
model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=20, batch_size=128)
score = model.evaluate(x_test, y_test, batch_size=128)
print(score)
实现了两个简单的小例子,通过这两个例子,可以看出使用keras搭建网络模型,既简单又快。是一个很好的工具。