deep learning from scratch (6.2) :
《深度学习入门:基于Python理论的实现》书中的代码由于设置了横轴的范围
:plt.hist(a.flatten(), 30,range(0,1)
。有些图是不全
的,以下的图是去掉range(0,1)
之后的图
relu-std=0.01-初始化-偏向性大
relu-xavier-初始化-偏向性
relu-He-初始化-无偏向性
sigmoid -xavier初始化
sigmoid-He初始化
相关代码
# -*- coding: utf-8 -*-
"""
Created on Tue Oct 15 11:54:48 2019
@author: qy
"""
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def ReLU(x):
return np.maximum(0, x)
def tanh(x):
return np.tanh(x)
input_data = np.random.randn(1000, 100) # 1000個のデータ # 1000个数据
node_num = 100 # 各隠れ層のノード(ニューロン)の数 # 各隐藏层的节点(神经元)数
hidden_layer_size = 5 # 隠れ層が5層 隐藏层有五层
activations = {} # ここにアクティベーションの結果を格納する 激活值的结果保留在这里
x = input_data
for i in range(hidden_layer_size):
if i != 0:
x = activations[i-1]
# 初期値の値をいろいろ変えて実験しよう!
#w = np.random.randn(node_num, node_num) * 0.01
#w = np.random.randn(node_num, node_num) * 1
#w = np.random.randn(node_num, node_num) * np.sqrt(1/node_num)
w = np.random.randn(node_num, node_num) * np.sqrt(2.0 / node_num)
a = np.dot(x, w)
# 活性化関数の種類も変えて実験しよう!
#z = sigmoid(a)
z = ReLU(a)
#z = tanh(a)
activations[i] = z
# ヒストグラムを描画
for i, a in activations.items():
plt.subplot( 1,len(activations), i+1)
plt.title(str(i+1) + "-layer")
if i != 0: plt.yticks([], [])
# plt.xlim(0.1, 1)
# plt.ylim(0, 7000)
plt.hist(a.flatten(), 30)
plt.show()