【Softmax 回归+交叉熵损失(标签为整数类型)手写数字识别】

本文介绍了Softmax回归,一种多类逻辑回归模型,如何使用Softmax函数将输入转化为概率分布。详细讲解了模型的实现步骤,包括数据准备、模型定义、损失函数、优化器选择以及TensorFlow示例代码。
摘要由CSDN通过智能技术生成

Softmax 回归简介

Softmax 回归,也称为多类逻辑回归,是一种适用于多分类问题的模型。它在输出层使用了 Softmax 函数,将输入的原始分数转化为表示各个类别概率的概率分布。具体来说,给定一个样本的特征向量,Softmax 回归将为每个类别分配一个概率,最终将概率最大的类别作为预测结果。

Softmax 函数

Softmax 函数用于将原始分数转化为概率分布。对于一个具有 K 个类别的多分类问题,给定输入向量 z = ( z 1 , z 2 , . . . , z K ) z = (z_1, z_2, ..., z_K) z=(z1,z2,...,zK),Softmax 函数的公式如下:

P ( y i = k ∣ z ) = e z k ∑ j = 1 K e z j P(y_i = k | z) = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} P(yi=kz)=j=1Kezjezk

其中, P ( y i = k ∣ z ) P(y_i = k | z) P(yi=kz) 表示输入属于类别 k 的概率, z k z_k zk 是输入对应类别 k 的原始分数。

Softmax 回归的实现步骤

  1. 导入必要的库
import tensorflow as tf
  1. 准备数据:加载训练数据和标签,进行数据预处理。

  2. 定义模型:创建模型的权重和偏差,定义 Softmax 函数的计算。

num_features = ...  # 特征数量
num_classes = ...   # 类别数量

# 定义权重和偏差
W = tf.Variable(tf.random.normal(shape=(num_features, num_classes)))
b = tf.Variable(tf.zeros(shape=(num_classes,)))

# 定义 Softmax 函数
def softmax(logits):
    return tf.nn.softmax(logits)
  1. 定义损失函数:使用交叉熵损失函数衡量预测值与真实标签之间的差异。
def cross_entropy_loss(y_true, y_pred):
    return tf.reduce_mean(-tf.reduce_sum(y_true * tf.math.log(y_pred), axis=1))
  1. 选择优化器:选择合适的优化器来最小化损失函数。
optimizer = tf.optimizers.SGD(learning_rate=0.01)
  1. 训练模型:使用训练数据进行模型训练。
def train_step(inputs, labels):
    with tf.GradientTape() as tape:
        logits = tf.matmul(inputs, W) + b
        predictions = softmax(logits)
        loss = cross_entropy_loss(labels, predictions)
    gradients = tape.gradient(loss, [W, b])
    optimizer.apply_gradients(zip(gradients, [W, b]))
    return loss

# 在训练数据上进行多个训练周期
for epoch in range(num_epochs):
    for batch_inputs, batch_labels in train_dataset:
        loss = train_step(batch_inputs, batch_labels)
  1. 评估模型:使用测试数据评估模型性能。

示例代码

import tensorflow as tf

# 准备数据
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# 定义模型
model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 设置 TensorBoard 回调
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir="logs")

# 训练模型
model.fit(x_train, y_train, epochs=5,
          validation_data=(x_test, y_test),
          callbacks=[tensorboard_callback])

# python -m tensorboard.main --logdir=./

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

武帝为此

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

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

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

打赏作者

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

抵扣说明:

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

余额充值