目录
使用Keras
1.继承 tf.keras.Model,定义网络每一层。
import tensorflow as tf
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
self.dropout = tf.keras.layers.Dropout(0.5)
def call(self, inputs, training=False):
x = self.dense1(inputs)
if training:
x = self.dropout(x, training=training)
return self.dense2(x)
model = MyModel()
2.定义tf.keras.models.Sequential的对象。(适合于串行网络),模型是层的简单堆叠,无法表示任意模型。
# Optionally, the first layer can receive an `input_shape` argument:
model = Sequential()
model.add(Dense(32, input_shape=(500,)))
# Afterwards, we do automatic shape inference:
model.add(Dense(32))
网络的每一层可以用tf.keras.layers.Layer包中定义的层。模型从输入层开始,逐个添加每一层。
2.训练模型
模型还需要再进行几项设置才可以开始训练。这些设置会添加到模型的编译步骤:
- 损失函数 - 衡量模型在训练期间的准确率。我们希望尽可能缩小该函数,以“引导”模型朝着正确的方向优化。
- 优化器 - 根据模型看到的数据及其损失函数更新模型的方式。
- 指标 - 用于监控训练和测试步骤。以下示例使用准确率,即图像被正确分类的比例。
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
训练神经网络模型需要执行以下步骤:
- 将训练数据馈送到模型中,在本示例中为
train_images
和train_labels
数组。 - 模型学习将图像与标签相关联。
- 我们要求模型对测试集进行预测,在本示例中为
test_images
数组。我们会验证预测结果是否与test_labels
数组中的标签一致。
model.fit(train_images, train_labels, epochs=5, validation_data=vd)
3.预测
predictions = model.predict(test_images)