自写版本,直接可运行,然后需要自己更改下保存路径,和修改清晰度。
以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()