ディープ ニューラル ネットワーク - ニューラル ネットワークの概要

活性化関数

ニューラル ネットワークに非線形要素を導入すると、活性化関数を通じてニューラル ネットワークはさまざまな曲線に適合します。活性化関数を使用しない場合、各層の出力は上位層の入力の一次関数となり、ニューラルネットワークが何層であっても出力は入力の線形結合となります。

シグモイド/ロジスティック関数

ここに画像の説明を挿入

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}}d 1) 現在のニューロンの重みを一様分布で生成します。ここで、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()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_40527560/article/details/131489542