小技巧(10):使用Python绘制激活函数(Sigmoid、Tanh、ReLU、PReLU)图像

该博客详细展示了如何使用Python的matplotlib库绘制Sigmoid、Tanh、ReLU和PReLU这四种常见的神经网络激活函数,并提供了将四个函数图像绘制在同一张图上的方法。通过代码解释了每个函数的定义及其图形特点,有助于理解这些函数在深度学习中的作用。

一、单张绘制

1.1 代码

import numpy as np
import matplotlib.pyplot as plt

# 0 设置字体
plt.rc('font',family='Times New Roman', size=15)

# 1.1 定义sigmoid函数
def sigmoid(x):
    return 1. / (1 + np.exp(-x))
# 1.2 定义tanh函数
def tanh(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
# 1.3 定义relu函数
def relu(x):
    return np.where(x < 0, 0, x)
# 1.4 定义prelu函数
def prelu(x):
    return np.where(x<0, x * 0.5, x)

# 2.1 定义绘制函数sigmoid函数
def plot_sigmoid():
    x = np.arange(-10, 10, 0.1)
    y = sigmoid(x)
    fig = plt.figure()#如果使用plt.figure(1)表示定位(创建)第一个画板,如果没有参数默认创建一个新的画板,如果plt.figure(figsize = (2,2)) ,表示figure 的大小为宽、长
    ax = fig.add_subplot(111)#表示前面两个1表示1*1大小,最后面一个1表示第1个
    ax.spines['top'].set_color('none')#ax.spines设置坐标轴位置,set_color设置坐标轴边的颜色
    ax.spines['right'].set_color('none')
    ax.spines['left'].set_position(('data', 0))
    ax.plot(x, y,color="black", lw=3)#设置曲线颜色,线宽
    plt.xticks(fontsize=15)#设置坐标轴的刻度子字体大小
    plt.yticks(fontsize=15)
    plt.xlim([-10.05, 10.05])#设置坐标轴范围
    plt.ylim([-0.02, 1.02])
    plt.tight_layout()#自动调整子图参数
    plt.show()#显示绘图
# 2.2 定义绘制函数tanh函数
def plot_tanh():
    x = np.arange(-10, 10, 0.1)
    y = tanh(x)
    fig =
本实践使用多层感知器训练(DNN)模型,用于预测手写数字图片。 以下是基于人工神经网络在PaddlePaddle平台上进行MNIST手写字符分类的实验目的和步骤: 实验目的 掌握人工神经网络的代码实现:通过实践熟悉PaddlePaddle框架中人工神经网络的构建方法,理解输入层、隐藏层、输出层等模块的代码实现及参数设置。 学习深度学习模型的参数调优技术:探究人工神经网络中关键超参数(如学习率、隐藏层神经元数量、激活函数等)对模型性能的影响,掌握使用验证集或交叉验证进行参数调优的方法。 可视化分析能力培养:通过绘制训练过程中的损失曲线、准确率曲线,直观理解人工神经网络的训练过程和分类原理。 完整实验流程实践:从数据预处理、模型构建、训练到模型评估,掌握深度学习项目全流程,并撰写规范的实验报告。 实验步骤 一、数据准备与预处理 加载数据集:从指定路径加载MNIST手写字符数据集,数据集包含60000张训练图像10000张测试图像,每张图像为28×28的灰度图像。 数据探索与可视化:查看数据集的基本信息,如图像数量、类别分布等。随机选取部分图像使用matplotlib等工具绘制图像,观察不同字符图像的形状和灰度分布。 数据预处理: 归一化处理:将图像的像素值从0-255缩放到0-1范围,加速模型训练。 数据增强:对训练集图像进行随机旋转、平移等操作,增加数据的多样性,防止过拟合。 二、模型训练与调参 基础人工神经网络模型训练:构建一个基础的人工神经网络模型,包含输入层、隐藏层和输出层。设置初始学习率为0.001,使用交叉熵损失函数和Adam优化器进行训练。在训练集和测试集上计算准确率,观察模型的基本性能。 网络结构对比实验:分别构建不同隐藏层神经元数量、不同激活函数(如ReLUSigmoidTanh等)的人工神经网络模型,比较不同网络结构在MNIST手写字符分类任务上的效果。 超参数调优:使用验证集对学习率、批量大小、正则化参数等超参数进行调整。例如,尝试学习率分别为0.0001、0.001、0.01,批量大小分别为32、64、128,记录不同参数组合下模型在验证集上的准确率,选择最优的超参数组合。 三、模型评估与可视化 性能评估:在测试集上计算模型的混淆矩阵、分类报告(精确率、召回率、F1值等),全面评估模型的分类性能。对比不同模型结构和超参数下的测试集准确率,分析模型的优劣。 可视化分析: 训练过程可视化:绘制训练过程中的损失曲线和准确率曲线,观察模型的收敛情况和泛化能力。
最新发布
11-09
<think>好的,我现在需要处理用户提供的关于使用多层感知器(DNN)模型进行MNIST手写数字分类的实验内容。用户已经详细列出了实验目的、步骤以及具体的操作,可能希望得到进一步的指导或相关问题的解答。 首先,我需要理解用户的需求。他们可能在进行一个深度学习的实验,使用PaddlePaddle框架。他们需要掌握代码实现、参数调优、可视化分析以及完整流程实践。用户可能希望了解如何具体实现这些步骤,或者在实现过程中遇到了问题,需要帮助。 接下来,我需要考虑用户可能的问题点。例如,在数据预处理阶段,如何正确归一化数据?数据增强的具体实现方法是什么?模型构建时,如何设置隐藏层和激活函数?在训练过程中,如何监控损失和准确率?超参数调优的具体方法有哪些?可视化部分,如何绘制损失曲线和准确率曲线? 然后,我需要确保回答符合用户的要求。用户要求使用中文回答,并在最后提出3-5个相关问题,格式必须正确,不能缺少“相关问题”部分,且问题要连贯,不能换行分散。同时,回答中可能需要提供代码示例,但用户没有明确要求,所以可能需要根据情况决定是否加入代码。 现在,我需要组织回答结构。首先,概述实验的关键点,分步骤解释每个部分的注意事项和实现方法,然后给出相关问题。例如,在数据预处理中,归一化通常是将像素值除以255,数据增强可以使用PaddlePaddle的数据增强模块。模型构建时,输入层是28*28=784,隐藏层可以选择不同数量的神经元,激活函数ReLU。训练时使用Adam优化器和交叉熵损失函数。可视化部分使用matplotlib绘制曲线。 相关问题可能需要涵盖数据增强的具体方法、模型评估指标的选择、超参数调优技巧、不同激活函数的影响以及数据预处理的其他方法。这样用户可以根据这些问题进一步深入学习或解决问题。 最后,检查是否符合所有格式要求,确保没有换行错误,相关问题部分正确列出,并且内容准确有帮助。</think>本实验的核心在于通过PaddlePaddle框架实现DNN模型训练,以下是关键实现要点: 1. **数据预处理实现**: ```python from paddle.vision.transforms import Normalize, Compose transform = Compose([ Normalize(mean=[127.5], std=[127.5]) # 归一化到[-1,1] ]) train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform) ``` 2. **DNN模型构建**: ```python class DNN(paddle.nn.Layer): def __init__(self, input_dim=784, hidden_dim=128, output_dim=10): super().__init__() self.net = paddle.nn.Sequential( paddle.nn.Linear(input_dim, hidden_dim), paddle.nn.ReLU(), paddle.nn.Linear(hidden_dim, output_dim) ) def forward(self, x): return self.net(x) ``` 3. **训练流程**: ```python model = paddle.Model(DNN()) model.prepare( optimizer=paddle.optimizer.Adam(learning_rate=0.001), loss=paddle.nn.CrossEntropyLoss(), metrics=paddle.metric.Accuracy() ) model.fit(train_dataset, test_dataset, epochs=10, batch_size=64) ``` 4. **可视化实现**: ```python import matplotlib.pyplot as plt # 假设history包含loss和acc数据 plt.plot(history['loss'], label='train_loss') plt.plot(history['val_loss'], label='val_loss') plt.legend() plt.show() ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值