您的当前位置:首页正文

个人笔记-TF2-iris-3-1

2024-11-25 来源:个人技术集锦
import tensorflow as tf
import numpy as np

#数据的准备,导入iris数据集
from sklearn.datasets import load_iris #这里导入的是sklearn数据库中的iris数据集,直接载入即可。
data = load_iris()

#本例只需要iris的特征与分类目标,只获取date和target
iris_target = data.target
iris_data = np. float32(data.data) #将其转化为float类型的列表(list)

#数据的处理
iris_target = np.float32(tf.keras.utils.to_categorical(iris_target, num_classes=3))#使用Keras自带的分散化工具对数据进行处理
iris_data = tf.data.Dataset.from_tensor_slices(iris_data).batch(50)#当生成的数据读取到内存中
iris_target = tf.data.Dataset.from_tensor_slices(iris_target).batch(50)#并准备以批量形式打印时

#模型
model = tf.keras.models.Sequential()#创建一个Sequential(顺序)模型,由多个网络层线性堆叠而成的。
# Add layers #之后根据需要逐级向其中添加不同的全连接层
model.add(tf.keras.layers.Dense(32, activation="relu"))
model.add(tf.keras. layers.Dense(64, activation="relu"))
model.add(tf.keras.layers.Dense(3, activation="softmax"))

#直接调用TensorFlow的优化器完成梯度函数的计算,这里用Adam优化器作为优化工具
opt = tf.optimizers.Adam(1e-3)

for epoch in range(1000):
    for data, lable in zip(iris_data, iris_target):
        with tf.GradientTape() as tape:


            #这里的损失函数采用的是交叉熵函数(softmax_crossentroy),使得数据计算分布能够最大限度地拟合目标值
            #CategoricalCrossentropy函数用于计算多分类问题的交叉熵
            logits = model(data) #固定写法
            loss_value = tf.reduce_mean(tf.keras.losses.categorical_crossentropy(y_true=lable, y_pred=logits)) #固定写法
            #首先通过模型计算出对应的值(内部采用前向调用函数),之后用tf.reduce_mean计算出损失函数

            #梯度更新函数是根据误差的幅度对数据进行更新的方法
            grads = tape. gradient(loss_value, model.trainable_variables)
            opt.apply_gradients(zip(grads, model.trainable_variables))
            #使用的模型直接获取参数的方式对数据进行不断更新而非人为指定

    print('Training loss is:', loss_value. numpy())
显示全文