Tensorflow2.0 keras Metrics的基本使用

Metrics的基本使用

  1. Metrics 创建并设置数据模式
  2. update_state 添加数据
  3. result().numpy() 获取结果
  4. reset_states 清空数据
步骤1 :创建meter 测量值处理
acc_meter = metrics.Accuracy()  # 正确率的计算
loss_meter = metrics.Mean()	# 求均值(传入损失值)
步骤2 : 更新数据(添加)
acc_meter.update_state(y_true, predict)	# 正确率传入数据
loss_meter.update_state(loss) # 损失值均值
步骤3:获取结果数据
print(step, "loss", loss_meter.result().numpy())	# 获取损失均值
print(step, "Evaluate Acc:", acc_meter.result().numpy()) # 获取正确率
步骤4:清空缓存
# 每步添加损失值
if step % 100 == 0:
	print(step, "loss", loss_meter.result().numpy())	# 获取损失均值
	loss_meter.reset_states()
if step % 500 == 0:
    print(step, "Evaluate Acc:", acc_meter.result().numpy()) # 获取正确率
    acc_meter.reset_states()

测试使用

import tensorflow as tf
import numpy as np

# 获取物理GPU的个数
gpus = tf.config.experimental.list_physical_devices("GPU")
for gpu in gpus:
    # 设置内存增长方式 自增长
    tf.config.experimental.set_memory_growth(gpu, True)
print("物理GPU个数:", len(gpus))

batch_size = 128

# 导入数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
print(x_train.shape, y_train.shape, x_test.shape, y_test.shape)


# 数据的预处理
def pre_process(x, y):
    x = tf.cast(x, tf.float32) / 255.0
    y = tf.cast(y, tf.int32)
    return x, y


# 数据映射 打乱 分批 重复处理
db_train = tf.data.Dataset.from_tensor_slices((x_train, y_train))
db_train = db_train.map(pre_process).shuffle(60000).batch(batch_size).repeat(10)

db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.map(pre_process).batch(batch_size)

db_sample = iter(db_train)
sample = next(db_sample)
print("X:", sample[0].shape, "Y:", sample[1].shape)

# 创建网络
model = tf.keras.Sequential([tf.keras.layers.Dense(256, activation="relu"),
                             tf.keras.layers.Dense(128, activation="relu"),
                             tf.keras.layers.Dense(64, activation="relu"),
                             tf.keras.layers.Dense(32, activation="relu"),
                             tf.keras.layers.Dense(10)])
model.build(input_shape=(None, 28 * 28))
model.summary()

# 优化器
optimizer = tf.keras.optimizers.Adam(lr=0.001)

# 正确率统计
acc_meter = tf.keras.metrics.Accuracy()
loss_meter = tf.keras.metrics.Mean()

for step, (x_batch, y_batch) in enumerate(db_train):

    # 前向传播
    with tf.GradientTape() as tape:
        # 前向传播准备
        x_batch = tf.reshape(x_batch, (-1, 28 * 28))
        y_one_hot = tf.one_hot(y_batch, depth=10)

        # 前向传播
        y_out = model(x_batch)

        # 计算损失函数
        loss = tf.reduce_mean(tf.losses.categorical_crossentropy(y_one_hot, y_out, from_logits=True))
        loss_meter.update_state(loss)
    # 更新梯度
    grads = tape.gradient(loss, model.trainable_variables)
    optimizer.apply_gradients(zip(grads, model.trainable_variables))

    # 显示损失函数  并重置
    if step % 100 == 0:
        print(step, "loss:", loss_meter.result().numpy())
        loss_meter.reset_states()

    if step % 500 == 0:
        # 手动统计
        total, total_correct = 0., 0.0
        # 准确率重置
        acc_meter.reset_states()

        for _, (x_test_batch, y_test_batch) in enumerate(db_test):

            x_test_batch = tf.reshape(x_test_batch, (-1, 28 * 28))

            y_test_out = model(x_test_batch)
            y_test_out = tf.argmax(y_test_out, axis=1)
            predict = tf.cast(y_test_out, dtype=tf.int32)

            # 手动计算准确率
            correct = tf.equal(predict, y_test_batch)
            total_correct += tf.reduce_sum(tf.cast(correct, tf.int32)).numpy()
            total += x_test_batch.shape[0]

            # 更新准确率数据
            acc_meter.update_state(y_test_batch, predict)

        # 显示准确率
        acc = total_correct/total
        print(step, "Acc", acc, acc_meter.result().numpy())
TensorFlow 2.0 中,构建基本的人工神经网络非常简单,可以遵循以下步骤: 1. 导入 TensorFlow 2.0 库 ```python import tensorflow as tf ``` 2. 构建模型 在 TensorFlow 2.0 中,可以使用 `tf.keras.Sequential()` 类来构建模型。该类表示一个线性的层次模型,可以通过在括号中添加层来构建模型。 ```python model = tf.keras.Sequential([ tf.keras.layers.Dense(units=64, activation='relu', input_shape=(input_shape,)), tf.keras.layers.Dense(units=10, activation='softmax') ]) ``` 上面的代码创建了一个具有两个密集层的模型。第一层有 64 个神经元,使用 ReLU 激活函数,并且需要输入数据的形状。第二层有 10 个神经元,使用 Softmax 激活函数。 3. 编译模型 在 TensorFlow 2.0 中,可以使用 `model.compile()` 方法来编译模型。在编译模型时,需要选择优化器、损失函数和评估指标。 ```python model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) ``` 上面的代码选择 Adam 优化器,使用分类交叉熵损失函数,并且使用准确率评估指标。 4. 训练模型 在 TensorFlow 2.0 中,可以使用 `model.fit()` 方法来训练模型。在训练模型时,需要选择训练数据、批次大小、训练轮数和验证数据。 ```python model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_val, y_val)) ``` 上面的代码使用训练数据 `x_train` 和 `y_train` 训练模型,每个批次包含 32 个样本,训练轮数为 10 轮,并且使用验证数据 `x_val` 和 `y_val` 验证模型。 5. 评估模型 在 TensorFlow 2.0 中,可以使用 `model.evaluate()` 方法来评估模型。在评估模型时,需要选择测试数据。 ```python model.evaluate(x_test, y_test) ``` 上面的代码使用测试数据 `x_test` 和 `y_test` 评估模型。 以上就是构建基本人工神经网络的步骤。当然,在实际使用中,还需要进行数据预处理、调整超参数等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廷益--飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值