激活函數主要做用:加入非線性python
# -*- coding: UTF-8 -*- import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 建立輸入數據 x = np.linspace(-7, 7, 180) # (-7, 7) 之間等間隔的 180 個點 # 激活函數的原始實現 def sigmoid(inputs): y = [1 / float(1 + np.exp(-x)) for x in inputs] return y def relu(inputs): y = [x * (x > 0) for x in inputs] return y def tanh(inputs): y = [(np.exp(x) - np.exp(-x)) / float(np.exp(x) - np.exp(-x)) for x in inputs] return y def softplus(inputs): y = [np.log(1 + np.exp(x)) for x in inputs] return y # 通過 TensorFlow 的激活函數處理的各個 Y 值 y_sigmoid = tf.nn.sigmoid(x)#能夠在tensorflow官網搜索tf.nn,查看各個激活函數 y_relu = tf.nn.relu(x) y_tanh = tf.nn.tanh(x) y_softplus = tf.nn.softplus(x) # 建立會話 sess = tf.Session() # 運行 y_sigmoid, y_relu, y_tanh, y_softplus = sess.run([y_sigmoid, y_relu, y_tanh, y_softplus]) # 建立各個激活函數的圖像 plt.figure(1, figsize=(8, 6)) plt.subplot(221) plt.plot(x, y_sigmoid, c='red', label='Sigmoid') plt.ylim((-0.2, 1.2)) plt.legend(loc='best') plt.subplot(222) plt.plot(x, y_relu, c='red', label='Relu') plt.ylim((-1, 6)) plt.legend(loc='best') plt.subplot(223) plt.plot(x, y_tanh, c='red', label='Tanh') plt.ylim((-1.3, 1.3)) plt.legend(loc='best') plt.subplot(224) plt.plot(x, y_softplus, c='red', label='Softplus') plt.ylim((-1, 6)) plt.legend(loc='best') # 顯示圖像 plt.show() # 關閉會話 sess.close()