以下は、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)) を返します。