<jupyter_start><jupyter_text><jupyter_code># -*- coding: utf-8 -*-
import numpy as np

# N　　　　　　　　：バッチサイズ
# D_in　　　：入力次元数
# H　　　　　　　　：隠れ層の次元数
# D_out：出力次元数
N, D_in, H, D_out = 64, 1000, 100, 10

# ランダムな入力データと出力データの作成
x = np.random.randn(N, D_in)
y = np.random.randn(N, D_out)

print(x.shape)
print(y.shape)
# 重みをランダムに初期化
w1 = np.random.randn(D_in, H)
w2 = np.random.randn(H, D_out)

print(w1.shape)
print(w2.shape)
#損失記録用のリスト
loss_list = []
#学習率 0.000001
learning_rate = 1e-6
for t in range(500):
    #①順伝播（yを予測するフェーズ）
    #重みw1とxの掛け算（行列の掛け算）
    h = x.dot(w1)
    #活性化関数reluを適用
    h_relu = np.maximum(h, 0)
    #中間層の出力にw2の重みを掛け算して予測出力を得る
    y_pred = h_relu.dot(w2)

    #二乗誤差の計算と、誤差の表示
    loss = np.square(y_pred - y).sum()
    print(t, loss)
    loss_list.append(loss)

    #逆伝播：w2とw1の勾配を計算する。
    grad_y_pred = 2.0 * (y_pred - y)
    grad_w2 = h_relu.T.dot(grad_y_pred)
    grad_h_relu = grad_y_pred.dot(w2.T)
    grad_h = grad_h_relu.copy()
    grad_h[h < 0] = 0
    grad_w1 = x.T.dot(grad_h)

    # 重みの更新(確率的勾配効果法)
    w1 -= learning_rate * grad_w1
    w2 -= learning_rate * grad_w2
import matplotlib.pyplot as plt

plt.xlabel("train num")
plt.ylabel("loss")
plt.plot(range(500),loss_list)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14506927465362673, 'fraction_numerical': 0.03993480032599837, 'mean_word_length': 3.3392226148409896, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '271098', 'license': 'MIT', 'n_tokens_mistral': 755, 'n_tokens_neox': 723, 'n_words': 99, 'path': 'Learning_pytorch_with_examples.ipynb', 'repo_name': 'perfectpanda-works/machine-learning', 'size': '1227'}