ミニバッチ勾配降下法の実装

次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、
ミニバッチ勾配降下法で X、y を学習し傾きと切片を予測してください.

import numpy as np

np.random.seed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)

X_b = np.c_[np.ones((100, 1)), X]

epochs = 50
minibatch_size = 20
m = len(X_b)

np.random.seed(0)
theta = np.random.randn(2,1)

t0, t1 = 200, 1000
def learning_schedule(t):
return t0 / (t + t1)

t = 0
for epoch in range(epochs):
shuffle = np.random.permutation(m)

# Q1:X_b、y の配列をランダムに並び替え、をそれぞれX_b_shuffled、y_shuffled に代入してください.
X_b_shuffled = X_b[##########]
y_shuffled = y[##########]
for i in range(0, m, minibatch_size):
t += 1
xi = X_b_shuffled[i:i+minibatch_size]
yi = y_shuffled[i:i+minibatch_size]

[Q1の選択肢]
1. m
2. epoch
3. shuffle

# Q2:勾配を求めてください.
gradients = ##########
eta = learning_schedule(t)
theta = theta – eta * gradients

print(theta)

[Q2の選択肢]
1. 2/epoch * xi.T.dot(xi.dot(theta) – yi)
2. 2/shuffle * xi.T.dot(xi.dot(theta) – yi)
3. 2/minibatch_size * xi.T.dot(xi.dot(theta) – yi)

Leave a comment

Your email address will not be published. Required fields are marked *