激活函数可视化,直接可运行版本--自写(tanh、sigmaid、relu、LeakyRelu)

  自写版本,直接可运行,然后需要自己更改下保存路径,和修改清晰度。

 以tanh(x)函数为例子 

import matplotlib.pyplot as plt
import numpy as np

def plot_sigmoid(ax, y, f, color, mingzi):
    ax.plot(y, f, color)
    ax.grid(linestyle='--')
    ax.grid(b=True, axis='y')
    ax.set_xticks([-10, -5, 0, 5, 10])
    ax.set_yticks([0, 0.5, 1])
    ax.set_ylim(-0.02, 1.02)
    ax.set_xlim(-10, 10)
    ax.set_title(mingzi, fontsize=18, verticalalignment="baseline")#backgroundcolor=color
    # ax.legend(["Sigmoid",'Tanh',"Relu",'LeakyReLU'])
def plot_tanh(ax, y, f, color, mingzi):
    ax.plot(y, f, color)
    # 添加坐标
    fig.add_axes(ax)
    # 隐藏坐标轴
    ax.axis[:].set_visible(False)
    # 添加坐标轴
    ax.axis['x'] = ax.new_floating_axis(0, 0)
    ax.axis['y'] = ax.new_floating_axis(1, 0)
    # x、y轴添加箭头
    ax.axis['x'].set_axisline_style('-|>', size=1.0)
    ax.axis['y'].set_axisline_style('-|>', size=1.0)
    # 设置坐标轴刻度显示方向
    ax.axis['x'].set_axis_direction('top')
    ax.axis['y'].set_axis_direction('right')
    ax.grid(linestyle='--')
    ax.grid(b=True, axis='y')
    ax.set_xticks([-10,-5,0,5,10])
    ax.set_yticks([-1, 0, 1])
    ax.set_ylim(-1.02, 1.02)
    ax.set_xlim(-10, 10)
    ax.set_title(mingzi, fontsize=18, verticalalignment="baseline")#backgroundcolor=color
    # ax.legend(["Sigmoid",'Tanh',"Relu",'LeakyReLU'])
def plot_ReLu(ax, y, f, color, mingzi):
    ax.plot(y, f, color)
    ax.grid(linestyle='--')
    ax.grid(b=True, axis='y')
    ax.set_xticks([-10,-5,0,5,10])
    ax.set_yticks([0, 5, 10])
    ax.set_ylim(-0.05, 10)
    ax.set_xlim(-10, 10)
    ax.set_title(mingzi, fontsize=18, verticalalignment="baseline")#backgroundcolor=color
    # ax.legend(["Sigmoid",'Tanh',"Relu",'LeakyReLU'])
def plot_LeakyRelU(ax, y, f, color, mingzi) :
    ax.plot(y, f, color)
    ax.grid(linestyle='--')
    ax.grid(b=True, axis='y')
    ax.set_xticks([-10,-5,0,5,10])
    ax.set_yticks([0, 5, 10])
    ax.set_ylim(-2.25, 10)
    ax.set_xlim(-10, 10)
    ax.set_title(mingzi, fontsize=18, verticalalignment="baseline")  # backgroundcolor=color
# fig, axs = plt.subplots(2, 2, figsize=(10, 8))
#
# y = np.linspace(-10, 10, 100)
# plot_sigmoid(axs[0, 0], y, sigmoid(y), 'b', "(a) Sigmoid")
# plot_tanh(axs[0, 1], y, tanh(y), 'r', "(b) Tanh")
# plot_ReLu(axs[1, 0], y, relu(y), 'g', "(c) ReLu")
# plot_LeakyRelU(axs[1, 1], y, leakyreLu(y, 2e-1), 'y', "(d) LeakyReLU")




#TODO:第二版
# def plot_sigmoid1(ax, y, f, color, mingzi):
#     ax.plot(y, f, color)
#     ax.grid(linestyle='--')
#     ax.grid(b=True, axis='y')
#     ax.set_xticks([])
#     ax.set_yticks([])
#     ax.set_ylim(-0.02, 1.02)
#     ax.set_xlim(-10, 10)
#     ax.set_title(mingzi, fontsize=18, verticalalignment="baseline")#backgroundcolor=color
#     ax.legend(["Sigmoid"], loc='upper right')
# fig, axs = plt.subplots(1, 1, figsize=(10, 8))
# y = np.linspace(-10, 10, 100)
# plot_sigmoid1(axs, y, sigmoid(y), 'b', "(a) Sigmoid")
# plt.tight_layout()
# plt.show()
##TODO:第三版
import mpl_toolkits.axisartist as axisartist
import numpy as np



print_1=["Sigmoid",'Tanh',"Relu",'LeakyReLU']
# print_1 = ['LeakyReLU']
for i in range(len(print_1)):
    print_=print_1[i]
    if print_=="Sigmoid":
        # 新建绘图区
        fig = plt.figure(figsize=(6, 6))
        # 坐标配置
        ax = axisartist.Subplot(fig, 111)
        # 添加坐标
        fig.add_axes(ax)
        # 隐藏坐标轴
        ax.axis[:].set_visible(False)
        # 添加坐标轴
        ax.axis['x'] = ax.new_floating_axis(0, 0)
        ax.axis['y'] = ax.new_floating_axis(1, 0)
        # x、y轴添加箭头
        ax.axis['x'].set_axisline_style('-|>', size=1.0)
        ax.axis['y'].set_axisline_style('-|>', size=1.0)
        # 设置坐标轴刻度显示方向
        ax.axis['x'].set_axis_direction('top')
        ax.axis['y'].set_axis_direction('right')
        # plt.title('Title', loc='left')
        # 设置坐标尺寸
        plt.xlim(-10, 10)
        plt.ylim(-0.0, 1.0)
        # plt.xlabel('x')
        # plt.ylabel('y')
        # 生成x轴(横轴)数据
        x = np.arange(-10, 10, 0.1)
        y=sigmoid(x)
        # plt.title('Title', loc='left')
        plt.plot(x, y, label=r'$sigmoid(x)=\frac{1}{1+e^{-x}}$', c='b')
        # y=tanh(x)
        # 开启图例并绘制
    if print_ == "Tanh":
        # 新建绘图区
        fig = plt.figure(figsize=(6, 6))
        # 坐标配置
        ax = axisartist.Subplot(fig, 111)
        # 添加坐标
        fig.add_axes(ax)
        # 隐藏坐标轴
        ax.axis[:].set_visible(False)
        # 添加坐标轴
        ax.axis['x'] = ax.new_floating_axis(0, 0)
        ax.axis['y'] = ax.new_floating_axis(1, 0)
        # x、y轴添加箭头
        ax.axis['x'].set_axisline_style('-|>', size=1.0)
        ax.axis['y'].set_axisline_style('-|>', size=1.0)
        # 设置坐标轴刻度显示方向
        ax.axis['x'].set_axis_direction('top')
        ax.axis['y'].set_axis_direction('right')

        # 设置坐标尺寸
        plt.xticks([-10, -5, 0, 5, 10])
        plt.yticks([-1, 0, 1])
        plt.ylim(-1.02, 1.02)
        plt.xlim(-10, 10)
        # plt.xlabel('x')
        # plt.ylabel('y')
        # 生成x轴(横轴)数据
        x = np.arange(-10, 10, 0.1)
        y = tanh(x)
        plt.plot(x, y, label=r'$\tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$', c='r')
    if print_ == "Relu" :
        # 新建绘图区
        fig = plt.figure(figsize=(6, 6))
        # 坐标配置
        ax = axisartist.Subplot(fig, 111)
        # 添加坐标
        fig.add_axes(ax)
        # 隐藏坐标轴
        ax.axis[:].set_visible(False)
        # 添加坐标轴
        ax.axis['x'] = ax.new_floating_axis(0, 0)
        ax.axis['y'] = ax.new_floating_axis(1, 0)
        # x、y轴添加箭头
        ax.axis['x'].set_axisline_style('-|>', size=1.0)
        ax.axis['y'].set_axisline_style('-|>', size=1.0)
        # 设置坐标轴刻度显示方向
        ax.axis['x'].set_axis_direction('top')
        ax.axis['y'].set_axis_direction('right')

        # 设置坐标尺寸
        plt.xticks([-10, -5, 0, 5, 10])
        plt.yticks([0, 5, 10])
        plt.ylim(-0.05, 10)
        plt.xlim(-10, 10)

        # plt.xlabel('x')
        # plt.ylabel('y')
        # plt.title('Title', loc='left')
        # 生成x轴(横轴)数据
        x = np.arange(-10, 10, 0.1)
        y = relu(x)
        plt.plot(x, y, label=r'$ReLU(x) = max(0, x)$', c='g')
    if print_ == 'LeakyReLU':
        # 新建绘图区
        fig = plt.figure(figsize=(6, 6))
        # 坐标配置
        ax = axisartist.Subplot(fig, 111)
        # 添加坐标
        fig.add_axes(ax)
        # 隐藏坐标轴
        ax.axis[:].set_visible(False)
        # 添加坐标轴
        ax.axis['x'] = ax.new_floating_axis(0, 0)
        ax.axis['y'] = ax.new_floating_axis(1, 0)
        # x、y轴添加箭头
        ax.axis['x'].set_axisline_style('-|>', size=1.0)
        ax.axis['y'].set_axisline_style('-|>', size=1.0)
        # 设置坐标轴刻度显示方向
        ax.axis['x'].set_axis_direction('top')
        ax.axis['y'].set_axis_direction('right')
        # 设置坐标尺寸
        plt.xticks([-10, -5, 0, 5, 10])
        plt.yticks([0, 5, 10])
        plt.ylim(-2.25, 10)
        plt.xlim(-10, 10)
        # plt.xlabel('x')
        # plt.ylabel('y')
        # 生成x轴(横轴)数据
        x = np.arange(-10, 10, 0.1)
        y = leakyreLu(x,2e-1)
        plt.plot(x, y, label=r'$LeakyReLU(x) = \max(ax, x)$', c='y')
        # plt.plot(x, y, c='y')
        # plt.text(-11, 0.8, r'$LeakyReLU(x) = \max(0.01x, x)$', fontsize=14)
    plt.legend(fontsize=9,loc='upper left')
    # 保存图像
    plt.savefig('{}.png'.format(print_), format='png', dpi=500)
    plt.close()
    # plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值