目次
活性化関数
ニューラル ネットワークに非線形要素を導入すると、活性化関数を通じてニューラル ネットワークはさまざまな曲線に適合します。活性化関数を使用しない場合、各層の出力は上位層の入力の一次関数となり、ニューラルネットワークが何層であっても出力は入力の線形結合となります。
シグモイド/ロジスティック関数
tf.nn.sigoid
Tanh (双曲線正接曲線)
シグモイドと比較すると、0を中心としています
tf.nn.tanh
履歴書
tf.nn.relu
LeakyReLu
ReLU の「ニューロン死」の軽減
tf.nn.leaky_relu
ソフトマックス
多重分類プロセスで使用され、多重分類に関する二値分類関数シグモイドの拡張です。目的は、多重分類の結果を確率の形式で表示することです。
tf.nn.softmax
他の活性化関数
活性化関数の選び方
パラメータの初期化
特定のニューロンの場合、初期化する必要があるパラメーターは 2 種類あります。1 つは重み w、もう 1 つはバイアス b で、バイアス b は初期状態では 0 です。重み w の初期化の方が重要です
ランダムな初期化
平均 0、標準偏差 1 の正規分布からサンプリングし、パラメータ W をいくつかの小さな値で初期化します。
標準の初期化
重みパラメータは、間隔の値で均一に初期化されます。つまり、( − 1 d \frac{-1}{\sqrt{d}}d− 1, 1 d \frac{1}{\sqrt{d}}d1) 現在のニューロンの重みを一様分布で生成します。ここで、d は各ニューロンへの入力の数です。
Xavier 初期化 (Glorot 初期化)
import tensorflow as tf
init=tf.keras.initializers.glorot_normal()
values=init(shape=(9,1))
print(values)
import tensorflow as tf
init=tf.keras.initializers.glorot_uniform()
values=init(shape=(9,1))
print(values)
彼の初期化
import tensorflow as tf
init=tf.keras.initializers.he_normal()
values=init(shape=(9,1))
print(values)
import tensorflow as tf
init=tf.keras.initializers.he_uniform()
values=init(shape=(9,1))
print(values)
ニューラルネットワークの構築
シーケンシャルでビルドする
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
model=keras.Sequential([
#第一个隐层
layers.Dense(3,activation='relu',kernel_initializer='he_normal',name='layer1',input_shape=(3,)),
#第二个隐层
layers.Dense(2,activation='relu',kernel_initializer='he_normal',name='layer2'),
#输出层
layers.Dense(2,activation='sigmoid',kernel_initializer='he_normal',name='layer3')
],
name='sequential'
)
model.summary()
param は重みとバイアスの数です
keras.utils.plot_model(model)
機能的な API を使用して構築する
#定义模型的输入
inputs=keras.Input(shape=(3,),name='input')
#第一个隐层
x=layers.Dense(3,activation='relu',name='layer1')(inputs) #此层输入为inputs,输出为x
#第二个隐层
x=layers.Dense(2,activation='relu',name='layer2')(x)
#输出层
outputs=layers.Dense(2,activation='sigmoid',name='output')(x)
#创建模型
model=keras.Model(inputs=inputs,outputs=outputs,name='Functional API Model')
model.summary()
keras.utils.plot_model(model,show_shapes=True)
モデルのサブクラス化による構築
#定义一个model的子类
class MyModel(keras.Model):
#定义网络的层结构
def __init__(self):
super(MyModel,self).__init__() #继承并初始化父类MyModel的方法
#第一个隐层
self.layers1=layers.Dense(3,activation='relu',name='layer1')
#第二个隐层
self.layers2=layers.Dense(2,activation='relu',name='layer2')
#输出层
self.layers3=layers.Dense(2,activation='sigmoid',name='layer3')
#定义网络的前向传播
def call(self,inputs):
x=self.layers1(inputs)
x=self.layers2(x)
outputs=self.layers3(x)
return outputs
#实例化模型
model=MyModel()
#设置输入
x=tf.ones((1,3))
y=model(x)
model.summary()