<jupyter_start><jupyter_text>活性化関数*** 目的***- ソースコードの理解。- 式を見てソースコードが書けるようにする。- 自分が書いたソースコードは人に説明できるようにする。- 今回は活性化関数を使って自分の理解度を測る。 活性化関数一覧***- step関数- シグモイド関数- ReLU関数- 恒等関数- ソフトマックス関数- Leaky ReLU関数- Parametric ReLU関数- Exponential Linear Units 今回のルール***- 何も見ずに式をソースコード化し説明文章も加える。- わからない・間違えた箇所は消さない。- 全部できたらGitにpushし、間違えた箇所があれば修正する。今回は第1回目の自主テストになるが今後もアウトプットを増やしていく。  step関数***$f(x) = \left\{\begin{array}{}0 & (x < 0)\\1 & (x \geqq 0)\end{array}\right.$<jupyter_code>import numpy as np

# step関数の定義
def step_function(x):
    y = 1.0*(x >= 0.0)
    return y

# x = 10の時
x = 10
y = step_function(x)
print(y)
# x = -3の時
step_function(-3)<jupyter_output><empty_output><jupyter_text>**step関数は、入力した値が0未満なら0が出力され、入力した値が0以上なら1が出力される関数。**  sigmoid関数***$h(x) = \frac{1}{1 + e^{-x}}\\$<jupyter_code>import numpy as np

# simoid関数の定義
def sigmoid(x):
    y = 1 / (1 + np.exp(-x))
    return y

# x = 2の時
x = 2
y = sigmoid(x)
print(y)
# x = -3の時
sigmoid(-3)<jupyter_output><empty_output><jupyter_text>**sigmoid関数は、入力した値が大きければ大きいほど1に近づき、入力した値が小さければ小さいほど0に近づく関数**  ReLU関数***$f(x) = \left\{\begin{array}{}x & {(x \geqq 0)}\\0 & {(x < 0)}\end{array}\right.$<jupyter_code>import numpy as np

# relu関数の定義
def relu(x):
    y = x >= 0.0
    return y

# x = -1の時
x = -1
y = relu(x)
print(y)
# x = 10の時
relu(10)<jupyter_output><empty_output><jupyter_text>**ReLU関数は、入力した値が0未満なら0が出力され、入力した値が0以上なら入力した値をそのまま出力する関数。**  恒等関数***$f(x) = x$<jupyter_code>import numpy as np

# 恒等関数の定義
def koutou(x):
    return x # 入力値をそのまま返すのでreturn x

# x = 10の時
x = 10
y = koutou(x)
print(y)

# x = -100の時
koutou(-100)<jupyter_output><empty_output><jupyter_text>**恒等関数は、入力した値をそのまま出力する関数**  ソフトマックス関数***$y_i = \frac{e^{x_i}}{\sum_{k=1}^{n}e^{x_k}}　(i = 1, 2, 3,..., n)$<jupyter_code>import numpy as np

# ソフトマックス関数の定義
def softmax(x):
    exp_x = np.exp(x)
    sum_exp_x = np.sum(exp_x)
    y = exp_x / sum_exp_x
    return y

x = ([0.2, 0.89, 0.38])
y = softmax(x)
print(y)
softmax(x=[0.1, 0.99, 0.53])<jupyter_output><empty_output><jupyter_text>**ソフトマックス関数は、出力された複数の値の合計値が1.0(100%)になるように整理される関数。**  Leaky ReLU関数***$f = \left\{\begin{array}{}x & {(x > 0)}\\ax & {(x \leqq 0)}\end{array}\right.\\a = 0.01$<jupyter_code>import numpy as np

def lrelu(x, alpha=0.01):
    y = np.where(x > 0.0, x, alpha*x)
    return y

# x = -2の時
x = -2
y = lrelu(x)
print(y)
# x = 10の時
lrelu(10)<jupyter_output><empty_output><jupyter_text>**Leaky ReLU関数は0を起点として、入力した値が0以下ならalpha * x(Leaky ReLU関数では基本的にa=0.01)が出力され、入力した値が0より大きいなら入力した値をそのまま出力する関数。**  Parametric ReLU関数***$f = \left\{\begin{array}{}x & {(x > 0)}\\ax & {(x \leqq 0)}\end{array}\right.\\a=パラメーター$<jupyter_code>import numpy as np

# Parametric ReLU関数の定義
def prelu(x, alpha=10):
    y = np.where(x > 0.0, x, alpha*x)
    return y

# x = -5の時
x = -0.5
y = prelu(x)
print(y)
# x = 5の時
prelu(5)<jupyter_output><empty_output><jupyter_text>**Parametric ReLU関数は0を起点として、入力する値が0以下ならalpha * a(Parametric ReLU関数は基本的にa=パラメーター)が出力され、入力した値が0より大きいなら入力した値をそのまま出力する関数**  Exponential Linear Units***$f = \left\{\begin{array}{}x & {(x > 0)}\\a(e^{x} -1) & {(x \leqq 0)}\end{array}\right.\\a = 1.0$<jupyter_code>import numpy as np

# Exponential Linear Unitsの定義
def elu(x, alpha=1.0):
    y = np.where(x > 0.0, x, alpha * (np.exp(x) - 1))
    return y

# x = 100
x = 100
y = elu(x)
print(y)
# x = -10
elu(-10)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.19082125603864733, 'fraction_numerical': 0.04045893719806763, 'mean_word_length': 4.70223752151463, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 41, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '32431', 'license': 'MIT', 'n_tokens_mistral': 2069, 'n_tokens_neox': 1933, 'n_words': 268, 'path': 'practice2.py.ipynb', 'repo_name': 'KozoNomamoto/activation-function', 'size': '3312'}