Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

ゼロから作る Deep Learningで使用する関数ファイル

イメージ
May 17, 2019

深層学習の活性化関数



書籍ではch01,ch02,ch03...フォルダと同じ階層にcommonフォルダを作成し、そのフォルダにfunctions.pyとして置いてある

書籍のgithubhttps://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/common/functions.py

各関数が必要な時はimportするだけで利用できるようにする。


# coding: utf-8
import numpy as np


def identity_function(x):
  return x


def step_function(x):
  return np.array(x > 0, dtype=np.int)


def sigmoid(x):
  return 1 / (1 + np.exp(-x))    


def sigmoid_grad(x):
  return (1.0 - sigmoid(x)) * sigmoid(x)


def relu(x):
  return np.maximum(0, x)


def relu_grad(x):
  grad = np.zeros(x)
  grad[x>=0] = 1
  return grad


def softmax(x):
  if x.ndim == 2:
    x = x.T
    x = x - np.max(x, axis=0)
    y = np.exp(x) / np.sum(np.exp(x), axis=0)
    return y.T

  x = x - np.max(x) # オーバーフロー対策(値が大きすぎて計算不可になるのを防ぐ)
  return np.exp(x) / np.sum(np.exp(x))


def mean_squared_error(y, t):
  return 0.5 * np.sum((y-t)**2)


def cross_entropy_error(y, t):
  if y.ndim == 1:
    t = t.reshape(1, t.size)
    y = y.reshape(1, y.size)

  # 教師データがone-hot-vectorの場合、正解ラベルのインデックスに変換
  if t.size == y.size:
    t = t.argmax(axis=1)

  batch_size = y.shape[0]
  return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_size


def softmax_loss(X, t):
  y = softmax(X)
  return cross_entropy_error(y, t)