活性化関数(伝達関数)は、入力信号の総和を出力信号に変換する関数のことです。
パーセプトロンの時代ではステップ関数が用いられ、バックプロパゲーションの時代ではシグモイド関数が用いられましたが、最近ではReLU関数が多く用いられます。
ここでは、よく使われる活性化関数の概要を説明し、TensorFlowで使う場合のサンプルコードを紹介したいと思います。
In [1]:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
sess = tf.Session()
In [2]:
def step_function(x):
return np.array(x > 0, dtype=np.int)
X = np.arange(-8., 8., 0.02)
Y = step_function(X)
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-0.5, 1.5)
plt.grid()
plt.show()
In [3]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.sigmoid(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-0.5, 1.5)
plt.grid()
plt.show()
In [4]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.relu(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-1., 8.)
plt.grid()
plt.show()
In [5]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.relu6(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-1., 8.)
plt.grid()
plt.show()
In [6]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.elu(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-2., 8.)
plt.grid()
plt.show()
In [7]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.softplus(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-1., 8.)
plt.grid()
plt.show()
In [8]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.softsign(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-1.5, 1.5)
plt.grid()
plt.show()
In [9]:
X = np.arange(-8., 8., 0.1)
Y = sess.run(tf.nn.tanh(X))
plt.plot(X, Y)
plt.xlim(-8, 8)
plt.ylim(-1.5, 1.5)
plt.grid()
plt.show()