さまざまな言語を使用して最も単純な 3 層ニューラル ネットワーク コードを実装する

以下は、Python で実装された最も単純な 3 層ニューラル ネットワーク コードです。

「」パイソン

numpyをnpとしてインポート

# ニューラルネットワークの構造を定義する

n_input = 2 #入力層のノード数

n_hidden = 3 #隠れ層のノードの数

n_output = 1 #出力層のノード数

# ニューラルネットワークの重みを初期化する

重み = {

    '隠し': np.random.uniform(size=(n_input, n_hidden)),

    '出力': np.random.uniform(size=(n_hidden, n_output))

}

# 順伝播を実行する

def forward_propagation(X):

    hidden_​​layer_input = np.dot(X,weights['hidden'])

    hidden_​​layer_output = シグモイド(hidden_​​layer_input)

    Output_layer_input = np.dot(hidden_​​layer_output,weights['output'])

    出力層出力 = シグモイド(出力層入力)

    出力層出力を返す

#活性化関数(シグモイド)を定義

デフォルトシグモイド(x):

    戻り値 1 / (1 + np.exp(-x))

# サンプル入力

X = np.array([[1, 2], [3, 4], [5, 6]])

# 順伝播を実行して出力を出力する

出力 = forward_propagation(X)

print(出力)

「」

この単純な 3 層ニューラル ネットワークには、2 つの入力ノード、3 つの隠れ層ノード、1 つの出力ノードがあります。順伝播中、入力データは隠れ層の重みと活性化関数を通過し、最終的に予測値が出力されます。上記のコードの重みはランダムに初期化され、隠れ層の出力は入力と重みの内積を計算し、その結果を活性化関数 (ここではシグモイド関数を使用します) に渡すことによって取得されます。次に、隠れ層の出力と出力層の重みの内積が計算され、活性化関数を通じて最終出力が取得されます。

以下は、C 言語で実装された最も単純な 3 層ニューラル ネットワーク コードです。

「」c

#include <stdio.h>

#include <math.h>

#define N_INPUT 2 //入力層のノード数

#define N_HIDDEN 3 //隠れ層のノード数

#define N_OUTPUT 1 // 出力層のノード数

// 関数宣言

ダブルシグモイド(ダブルx);

void forward_propagation(double input[N_INPUT], double hidden_​​output[N_HIDDEN], double Output[N_OUTPUT]);

int main() {

    //ニューラルネットワークの重みを初期化する

    doubleweights_hidden[N_INPUT][N_HIDDEN] = {

        {0.1、0.4、0.7}、

        {0.2、0.5、0.8}

    };

    doubleweights_output[N_HIDDEN][N_OUTPUT] = {

        {0.6}、

        {0.9}、

        {0.3}

    };

    // サンプル入力

    ダブル入力[N_INPUT] = {1, 2};

    // 順伝播を実行し、出力を出力します

    double hidden_​​output[N_HIDDEN];

    ダブル出力[N_OUTPUT];

    forward_propagation(入力、隠し出力、出力);

    printf("%lf\n", 出力[0]);

    0を返します。

}

//順伝播を実行する

void forward_propagation(double input[N_INPUT], double hidden_​​output[N_HIDDEN], double Output[N_OUTPUT]) {

    // 隠れ層の出力を計算します

    for (int i = 0; i < N_HIDDEN; i++) {

        ダブル隠し入力 = 0;

        for (int j = 0; j < N_INPUT; j++) {

            hidden_​​input += input[j] *weights_hidden[j][i];

        }

        hidden_​​output[i] = シグモイド(hidden_​​input);

    }

    // 出力層の出力を計算する

    for (int i = 0; i < N_OUTPUT; i++) {

        ダブル出力_入力 = 0;

        for (int j = 0; j < N_HIDDEN; j++) {

            出力入力 += 隠し出力[j] * 重み出力[j][i];

        }

        出力[i] = シグモイド(出力_入力);

    }

}

//活性化関数(シグモイド)を定義

ダブルシグモイド(ダブルx) {

    1 / (1 + exp(-x)) を返します。

おすすめ

転載: blog.csdn.net/ls1300005/article/details/131712463