tensorflow测量工具的使用

在这里插入图片描述

代码实现

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers,Sequential,datasets

# #[0,1,1]
# #[0,1,2]
# #y_true[1,2,3,3,1]
# #y_pred[2,1,3,3,1]
# #新建测量器
# m=tf.keras.metrics.Accuracy()
# #写入数据
# m.update_state([0,1,1],[0,1,2])
# #读取统计数据
# m.result()
#清除
# m.reset_states()
# m.result()
# #新建测量器
# m=tf.keras.metrics.CategoricalAccuracy()
# #写入数据
# m.update_state([[0,0,1],[0,1,0]],[[0.1,0.9,0.8],[0.05,0.95,0]])
# #读取统计结果
# m.result()

以上注释掉的部分为下面代码不需要的部分,只作为了解

从这一步开始,我们定义了两个测试器,一个用来测试训练过程的损失值,一个用来测试准确率

acc_meter=tf.keras.metrics.Accuracy()
loss_meter=tf.keras.metrics.Mean()
model=Sequential([
    layers.Dense(256,activation='relu'),
    layers.Dense(128,activation='relu'),
    layers.Dense(64,activation='relu'),
    layers.Dense(32,activation='relu'),
    layers.Dense(10,activation='softmax')    
])
model.build(input_shape=[None,28*28])
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),\
             loss=tf.keras.losses.CategoricalCrossentropy(),\
             metrics=['accuracy'])
model.summary()

在这里插入图片描述

def preprocess(x,y):
    x=tf.cast(x,dtype=tf.float32)/255.
    x=tf.reshape(x,[-1,28*28])
    y=tf.one_hot(y,depth=10)
    return x,y

(x_train, y_train), (x_test, y_test)=tf.keras.datasets.mnist.load_data() 
train_db=tf.data.Dataset.from_tensor_slices((x_train,y_train))
train_db=train_db.shuffle(10000)
train_db=train_db.batch(128)
train_db=train_db.map(preprocess)

test_db=tf.data.Dataset.from_tensor_slices((x_test,y_test))
test_db=test_db.shuffle(10000)
test_db=test_db.batch(128)
test_db=test_db.map(preprocess)
#引入时间更方便我们监测
import datetime
current_time=datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
#新建一个文件夹用来保存检测到的数据
log_dir='logs/'+current_time
summary_writer=tf.summary.create_file_writer(log_dir)

这里面我们自定义一个训练流程

op=tf.keras.optimizers.Adam(0.01)
for epoch in range(20):
    for step,(x,y) in enumerate(train_db):   #一次取一批128个数据
        with tf.GradientTape() as tape:
            loss=tf.losses.categorical_crossentropy(y,model(x))
            loss_meter.update_state(loss)
        grad=tape.gradient(loss,model.trainable_variables)
        op.apply_gradients(zip(grad,model.trainable_variables))
        if step%100==0:
            print('epoch:',epoch,'step:',step,'loss',loss_meter.result().numpy())
            #这里将数据保存到logs文件夹里(固定写法)
            with summary_writer.as_default():
                tf.summary.scalar(name='loss',data=loss_meter.result().numpy(),step=epoch*600+step)
            loss_meter.reset_states()     #这里做了数据清空,防止下次从这次的步骤直接开始 
    for step,(x,y) in enumerate(test_db):   #一次取一批128个数据
        out=model(x)
        pred=tf.cast(tf.argmax(out,axis=-1),dtype=tf.int32)
        y=tf.cast(tf.argmax(y,axis=-1),dtype=tf.int32)
        acc_meter.update_state(y,pred)
    print('epoch:',epoch,'acc:',acc_meter.result().numpy())
    with summary_writer.as_default():
                tf.summary.scalar(name='acc',data=acc_meter.result().numpy(),step=epoch*600+step)
    acc_meter.reset_states()

在这里插入图片描述

tensorboard的打开方法

先进入对应的环境,然后进入对应的文件夹,终端命令tensorboard --logdir,输出网址
在这里插入图片描述
在这里插入图片描述
在这个页面中,alt键可以改变图表大小 这个页面支持下载
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小屋*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值