TensorFlow - 单层感知机

📅 发布时间:2026/7/3 18:47:08 👁️ 浏览次数:
TensorFlow - 单层感知机
摘要本文介绍了使用TensorFlow实现单层感知机进行MNIST手写数字分类的方法。单层感知机是最基础的神经网络模型通过输入层与输出层的直接连接实现分类任务。文章详细讲解了逻辑回归作为单层感知机的实例包括Sigmoid激活函数、交叉熵损失函数和梯度下降优化器的应用。代码实现部分展示了完整的训练流程数据预处理、模型构建、训练循环和测试评估。实验结果表明该模型在MNIST测试集上达到91.35%的准确率。文中还解释了感知机、Softmax、独热编码等关键概念为理解神经网络基础提供了实用范例。目录TensorFlow - 单层感知机单层感知机输出结果逻辑回归说明专业术语注解TensorFlow - 单层感知机要理解单层感知机首先需要了解人工神经网络ANN。人工神经网络是一种信息处理系统其工作机制受生物神经回路的功能启发。一个人工神经网络包含多个相互连接的处理单元。以下是人工神经网络的结构示意图 ——该示意图显示隐藏单元与外部层进行信息交互而输入单元和输出单元仅能通过网络的隐藏层实现通信。神经网络的架构由以下要素定义节点的连接模式、网络的总层数、输入与输出之间的节点层级以及每层的神经元数量。人工神经网络主要分为两种架构二者的功能各有侧重分别是单层感知机多层感知机单层感知机单层感知机是首个被提出的神经网络模型。神经元的局部记忆存储着一个权重向量单层感知机的计算过程为将输入向量的每个元素与权重向量的对应元素相乘再对所有乘积结果求和最终的求和结果会作为激活函数的输入激活函数的输出即为单层感知机的最终输出。接下来我们将结合 TensorFlow实现基于单层感知机的图像分类任务。逻辑回归是诠释单层感知机的最佳实例先为大家展示 SigmoidS 型激活函数的曲线特征纵轴取值1.0、0.8、0.6、0.4、0.2、0.0横轴取值-10、5、10曲线为 Sigmoid 函数的典型 S 型曲线下面介绍逻辑回归的基本训练步骤训练开始时为权重赋予随机初始值对训练集中的每个样本计算期望输出与实际输出的差值即误差并利用该误差调整权重重复上述过程直到整个训练集的误差低于设定的阈值或训练达到最大迭代次数时停止。以下是实现逻辑回归的完整代码# 导入MNIST数据集 from tensorflow.examples.tutorials.mnist import input_data mnist input_data.read_data_sets(/tmp/data/, one_hot True) import tensorflow as tf import matplotlib.pyplot as plt # 模型参数设置 learning_rate 0.01 # 学习率 training_epochs 25 # 训练轮数 batch_size 100 # 批次大小 display_step 1 # 损失值显示步长 # 定义TensorFlow计算图的输入占位符 x tf.placeholder(float, [None, 784]) # MNIST图像为28*28像素展平后为784维向量 y tf.placeholder(float, [None, 10]) # 识别0-9共10个数字对应10个类别 # 构建模型定义模型权重和偏置 W tf.Variable(tf.zeros([784, 10])) # 权重矩阵784输入维度→10输出维度 b tf.Variable(tf.zeros([10])) # 偏置向量对应10个类别 # 构建模型计算逻辑使用Softmax激活函数 activation tf.nn.softmax(tf.matmul(x, W) b) # 用交叉熵定义损失函数最小化预测误差 cross_entropy y * tf.log(activation) cost tf.reduce_mean(-tf.reduce_sum(cross_entropy, reduction_indices 1)) # 选择梯度下降优化器最小化损失函数 optimizer tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) # 绘图相关设置记录每轮训练的平均损失 avg_set [] epoch_set [] # 初始化所有模型变量 init tf.initialize_all_variables() # 启动计算图并训练模型 with tf.Session() as sess: sess.run(init) # 训练循环 for epoch in range(training_epochs): avg_cost 0. # 初始化每轮的平均损失 total_batch int(mnist.train.num_examples / batch_size) # 计算总批次数 # 遍历所有批次进行训练 for i in range(total_batch): batch_xs, batch_ys mnist.train.next_batch(batch_size) # 获取批次数据 # 代入批次数据训练模型更新权重和偏置 sess.run(optimizer, feed_dict {x: batch_xs, y: batch_ys}) # 计算当前批次的损失累加用于求平均值 avg_cost sess.run(cost, feed_dict {x: batch_xs, y: batch_ys}) / total_batch # 按设定步长显示训练日志 if epoch % display_step 0: print (Epoch:, %04d % (epoch1), cost, {:.9f}.format(avg_cost)) avg_set.append(avg_cost) epoch_set.append(epoch1) print (Training phase finished) # 训练阶段结束 # 绘制训练轮数与平均损失的关系图 plt.plot(epoch_set, avg_set, o, label Logistic Regression Training phase) plt.ylabel(cost) # 纵轴损失值 plt.xlabel(epoch) # 横轴训练轮数 plt.legend() # 显示图例 plt.show() # 显示图像 # 测试模型判断预测结果与真实标签是否一致 correct_prediction tf.equal(tf.argmax(activation, 1), tf.argmax(y, 1)) # 计算模型在测试集上的准确率 accuracy tf.reduce_mean(tf.cast(correct_prediction, float)) print(Model accuracy:, accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))输出结果上述代码运行后会得到以下输出2018-7-0 11:41:19.960 ITsrcitensorflowtesorlowlcoreplatforcfeaturgurd.cc:1e] 你的 CPU 支持部分指令集但当前编译的 TensorFlow 二进制文件未启用该指令集AVX2Epoch: 0001 cost1.176560601Epoch: 0004 cost0.498397500Epoch: 0005 cost0.463813413Epoch: 0008 cost0.416157970Epoch: 0009 cost0.399920910Epoch: 0010 cost0.399701910Epoch: 0011 cost0.383367628Epoch: 0012 cost0.376823489Epoch: 0013 cost0.371032368Epoch: 0014 cost0.365939891Epoch: 0015 cost0.361386407Epoch: 0019 cost0.147278250Epoch: 0020 cost0.364164180Epoch: 0021 cost0.341485278Epoch: 0022 cost0.335003812Epoch: 0023 cost0.336675840Epoch: 0024 cost0.334456453Epoch: 0025 cost0.332455397Training phase finishedModel accuracy:0.9135同时会生成一张训练可视化图表图表特征如下标题相关Logistic Regression Training phase纵轴损失值刻度 1.2、1.0、0.8、0.6、0.4横轴训练轮数刻度 0、5、10、15、20、25散点以圆圈样式呈现训练轮数与对应损失值的关系逻辑回归说明逻辑回归是一种经典的预测分析方法主要用于描述数据特征并解释一个二元因变量与一个或多个标称型 / 自变量之间的关联关系也是单层感知机在二分类 / 多分类任务中的典型应用形式。专业术语注解Perceptron感知机最简单的神经网络模型仅包含输入层和输出层无隐藏层Softmax多分类任务的激活函数将输出值映射为 0~1 之间的概率且所有类别概率和为 1Cross Entropy交叉熵衡量概率分布之间的差异是分类任务中常用的损失函数One-hot Encoding独热编码将离散类别标签转换为二进制向量如数字 5 对应 [0,0,0,0,0,1,0,0,0,0]Gradient Descent梯度下降最常用的优化算法通过沿损失函数的梯度反方向更新参数最小化损失MNIST Dataset手写数字数据集包含 70000 张 28*28 的灰度手写数字图片是机器学习入门的经典数据集。