[tensorflow]tensorflow2.1.0使用内置方法进行培训和评估

1、引言

本练习使用内置API进行训练和验证时的训练,评估和预测(推断)模型(例如model.fit(),model.evaluate(),model.predict())。

我们最回顾下机器学习的一般步骤:

  1. 数据准备
  2. 创建模型
  3. 训练模型
  4. 评估模型
  5. 预测数据

其实任何机器学习的过程都是这几个大步骤的扩充和缩减。

说明:

  1. 本练习用tensorflow 2.1.0,python 3.7
  2. 如不说明,所有代码读引入以下包
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
  1. 不涉及分布式训练

2、第一个实例

下面的实例我们把数据传递给tensorflow 内置的训练方法和模型进行练习,其中原始数据通通常用Numpy arrarys(通常用于小数据或者想保存在内存的数据)或tf.data Dataset 对象(快速且大规模数据、需要分布式训练)或Pandas dataframes保存。这个实例我们用 MNIST dataset的数据保存在Numpy arrarys中。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
#创建模型
inputs = keras.Input(shape=(784,), name="digits")
x = layers.Dense(64, activation="relu", name="dense1")(inputs)
x = layers.Dense(64, activation="relu", name="dense2")(x)
outputs = layers.Dense(10, activation="softmax", name="predictions")(x)
model = keras.Model(inputs=inputs, outputs=outputs)

#下载数据
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 处理并且保存为 NumPy arrays
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
y_train = y_train.astype("float32")
y_test = y_test.astype("float32")
# 保留部分数据作为验证数据
x_val = x_train[-10000:]
y_val = y_train[-10000:]
x_train = x_train[:-10000]
y_train = y_train[:-10000]
#编译模型
model.compile(
    #指定优化器
    optimizer=keras.optimizers.RMSprop(),
    # 指定损失函数
    loss=keras.losses.SparseCategoricalCrossentropy(),
    # 配置训练指标类型
    metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
#训练模型
history = model.fit(
    x_train,
    y_train,
    batch_size=64,
    epochs=2,
   #在每个训练周期结束后,传入验证数据评估下损失率和训练指标情况
    validation_data=(x_val, y_val),
)
#模型训练后得到的模型的history属性保留了每一次训练的损失值和指标值
history.history
#用测试数据进行模型评估
results = model.evaluate(x_test, y_test, batch_size=128)
print("测试损失值, 测试正确值:", results)
#预测数据
predictions = model.predict(x_test[:3])
print("测试结果形状:", predictions.shape

实例解析:

  1. 调用模型的compile()方法时,指定损失函数,优化器以及可选的一些需要的监视度量。
#编译模型
model.compile(
    #指定优化器
    optimizer=keras.optimizers.RMSprop(),
    # 指定损失函数
    loss=keras.losses.SparseCategoricalCrossentropy(),
    # 配置监控度量类型
    metrics=[keras.metrics.SparseCategoricalAccuracy()],
)

针对多个输出的情况,可以指定多个损失函数和多个度量指标。

  1. 更加专业化的编码方式,应该把创建模型和编译模型函数化,方便代码的复用,如:
def get_uncompiled_model():
    inputs = keras.Input(shape=(784,), name="digits")
    x = layers.Dense(64, activation="relu", name="dense1")(inputs)
    x = layers.Dense(64, activation="relu", name="dense2")(x)
    outputs = layers.Dense(10, activation="softmax", name="predictions")(x)
    model = keras.Model(inputs=inputs, outputs=outputs)
    return model
def get_compiled_model():
    model = get_uncompiled_model()
    model.compile(
        optimizer="rmsprop",
        loss="sparse_categorical_crossentropy",
        metrics=["sparse_categorical_accuracy"],
    )
    return model
  1. 自动保留验证数据集

在实验中,我们通过validate_data参数将NumPy数组(x_val,y_val)的元组传递给模型,以便在每个时期结束时评估验证损失和验证指标。

#训练模型
history = model.fit(
    x_train,
    y_train,
    batch_size=64,
    epochs=2,
    #在每个训练周期结束后,传入验证数据评估下损失率和训练指标情况
    validation_data=(x_val, y_val),
)

实际应用内中可以通过validation_split参数指定保留百分之多少的数据作为验证数据,如下保留20%

model = get_compiled_model()
model.fit(x_train, y_train, batch_size=64, validation_split=0.2, epochs=2)

3、内置的优化器、损失函数和度量

内置的优化器:

  1. SGD()
  2. RMSprop()
  3. Adam()

内置的损失函数:

  1. MeanSquaredError()
  2. KLDivergence()
  3. CosineSimilarity()

内置的度量:

  1. AUC()
  2. Precision()
  3. Recall()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值