次のコードで空欄になっている行に入る適切な選択肢を 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)