TensorFlow-Course项目教程:使用TensorFlow实现逻辑回归

TensorFlow-Course项目教程:使用TensorFlow实现逻辑回归

TensorFlow-Course :satellite: Simple and ready-to-use tutorials for TensorFlow TensorFlow-Course 项目地址: https://gitcode.com/gh_mirrors/te/TensorFlow-Course

引言:从线性回归到逻辑回归

在机器学习领域,线性回归和逻辑回归是最基础也是最重要的两种算法。线性回归用于预测连续值输出,而逻辑回归则专门用于解决二分类问题。本教程将详细介绍如何使用TensorFlow实现逻辑回归模型,并以MNIST数据集中的数字0和1分类为例进行实践。

数据集准备:MNIST子集

我们使用的数据集是著名的MNIST手写数字数据集,但只选取其中的数字0和1两类样本:

  • 原始MNIST包含55000个训练样本和10000个测试样本
  • 每个样本是28×28像素的灰度图像
  • 我们将图像展平为784维的特征向量
  • 通过筛选只保留标签为0和1的样本

这种二分类问题的设置使得我们可以专注于逻辑回归的核心概念,而不必一开始就处理复杂的多分类问题。

逻辑回归理论基础

从线性到非线性

线性回归使用线性函数$y=W^{T}x$进行预测,而逻辑回归需要预测的是二元标签$y\in{0,1}$。为了实现这一目标,我们引入了Sigmoid函数:

$$ P(y=1|x)=h_{W}(x)=\frac{1}{1+exp(-W^{T}x)}=Sigmoid(W^{T}x) $$

Sigmoid函数将线性预测结果映射到(0,1)区间,可以解释为样本属于正类的概率。

损失函数设计

逻辑回归使用交叉熵作为损失函数:

$$ Loss(W) = \sum_{i}{y^{(i)}log\frac{1}{h_{W}(x^{i})}+(1-y^{(i)})log\frac{1}{1-h_{W}(x^{i})}} $$

这个损失函数的特点是:

  1. 当y=1时,只有第一项起作用,鼓励预测概率接近1
  2. 当y=0时,只有第二项起作用,鼓励预测概率接近0
  3. 整体上,它惩罚预测概率与真实标签的偏差

TensorFlow实现详解

数据预处理

首先我们需要从MNIST数据集中提取0和1两类样本:

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", reshape=True, one_hot=False)

# 数据整理
data = {}
data['train/image'] = mnist.train.images
data['train/label'] = mnist.train.labels

# 筛选0和1的训练样本
index_list_train = []
for sample_index in range(data['train/label'].shape[0]):
    label = data['train/label'][sample_index]
    if label == 1 or label == 0:
        index_list_train.append(sample_index)

# 重构训练数据结构
data['train/image'] = mnist.train.images[index_list_train]
data['train/label'] = mnist.train.labels[index_list_train]

同样的处理也应用于测试集,确保训练和评估使用相同分布的数据。

模型构建

逻辑回归在TensorFlow中可以简单地实现为一个全连接层加Softmax:

import tensorflow as tf

# 定义占位符
image_place = tf.placeholder(tf.float32, shape=([None, num_features]), name='image')
label_place = tf.placeholder(tf.int32, shape=([None,]), name='gt')
label_one_hot = tf.one_hot(label_place, depth=2, axis=-1)

# 模型结构 - 相当于逻辑回归
logits = tf.contrib.layers.fully_connected(
    inputs=image_place, 
    num_outputs=2,  # 二分类输出
    scope='fc'
)

# 定义损失函数
with tf.name_scope('loss'):
    loss = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(
            logits=logits, 
            labels=label_one_hot
        )
    )

# 定义准确率计算
with tf.name_scope('accuracy'):
    correct_pred = tf.equal(
        tf.argmax(logits, 1), 
        tf.argmax(label_one_hot, 1)
    )
    accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

这里有几个关键点需要注意:

  1. 使用全连接层作为逻辑回归的实现
  2. 输出维度设为2,虽然理论上二分类可以只输出1个值,但实践中常用两个输出
  3. 使用softmax_cross_entropy_with_logits计算损失,它内部已经包含了softmax操作

训练过程

训练过程采用标准的mini-batch梯度下降:

  1. 从训练集中随机抽取一个小批量样本
  2. 计算当前参数下的损失和梯度
  3. 使用优化器更新参数
  4. 定期在验证集上评估模型性能

扩展思考

虽然本教程专注于二分类问题,但逻辑回归的思想可以自然地扩展到多分类场景:

  1. 输出层神经元数量等于类别数
  2. 仍然使用softmax激活函数
  3. 交叉熵损失函数形式保持不变

这种扩展实际上就是多类逻辑回归,也称为softmax回归,它是许多复杂分类模型的基础构建块。

总结

通过本教程,我们系统地学习了:

  1. 逻辑回归的基本原理和数学表达
  2. 如何在TensorFlow中实现逻辑回归模型
  3. 针对MNIST数据集进行二分类任务的具体实践

逻辑回归虽然简单,但它包含了机器学习中许多核心概念:概率建模、损失函数、梯度下降等。理解这些基础概念对于后续学习更复杂的深度学习模型至关重要。

TensorFlow-Course :satellite: Simple and ready-to-use tutorials for TensorFlow TensorFlow-Course 项目地址: https://gitcode.com/gh_mirrors/te/TensorFlow-Course

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郁音允Zoe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值