入力層、1層の中間層、出力層からなる2層のニューラルネットワークをnumpyを用いて実装してみましょう。
ニューラルネットワークへの入力
中間層の活性化関数はReLU関数、出力層の活性化関数は恒等関数とします。
このニューラルネットワークの出力
$1 \leq n, m, k \leq 100$ - $-100 \leq \bold{x}i, \bold{W}{i,j}^{(1)},\bold{W}_{i,j}^{(2)}, \bold{b}_i^{(1)}, \bold{b}_i^{(2)} \leq 100$
- 入力は全て整数
入力は以下の形式で標準入力から与えられます。
$ n \ m \ k \ \bold{x}1 \ \bold{x}2 \ \ldots \ \bold{x}n \ \bold{W}{11}^{(1)} \ \bold{W}{12}^{(1)} \ \ldots \ \bold{W}{1n}^{(1)} \ \bold{W}{21}^{(1)} \ \bold{W}{22}^{(1)} \ \ldots \ \bold{W}{2n}^{(1)} \ \vdots \ \bold{W}{m1}^{(1)} \ \bold{W}{m2}^{(1)} \ \ldots \ \bold{W}{mn}^{(1)} \ \bold{b}1^{(1)} \ \bold{b}2^{(1)} \ \ldots \ \bold{b}m^{(1)} \ \bold{W}{11}^{(2)} \ \bold{W}{12}^{(2)} \ \ldots \ \bold{W}{1m}^{(2)} \ \bold{W}{21}^{(2)} \ \bold{W}{22}^{(2)} \ \ldots \ \bold{W}{2m}^{(2)} \ \vdots \ \bold{W}{k1}^{(2)} \ \bold{W}{k2}^{(2)} \ \ldots \ \bold{W}{km}^{(2)} \ \bold{b}_1^{(2)} \ \bold{b}_2^{(2)} \ \ldots \ \bold{b}_k^{(2)} \ $
したがって以下のようなコードで入力を受け取ることができます。
n, m, k = map(int, input().split())
x = np.array(list(map(int, input().split())))
W1 = np.array([list(map(int, input().split())) for _ in range(m)])
b1 = np.array(list(map(int, input().split())))
W2 = np.array([list(map(int, input().split())) for _ in range(k)])
b2 = np.array(list(map(int, input().split()))
出力
3 2 2
2 -4 3
4 -4 2
3 -2 0
-4 -1
-2 2
3 -5
2 -4
-24 9
10 5 2
79 -23 -9 -25 10 49 13 -41 26 58
-63 -83 -92 -95 4 -4 54 -48 15 55
86 53 -24 80 -70 76 35 -51 -48 40
98 89 -8 -48 -11 -1 -69 88 -96 -58
-18 -93 -61 -56 70 -56 -16 65 -70 29
-95 -44 -20 -68 -41 52 -16 29 32 -9
12 74 62 -97 -42
2 -24 40 58 25
-31 57 56 -24 40
-49 -83
-239735 405345