我如何可视化此梯度下降算法?
How can I visualise this gradient descent algorithm?
如何直观地显示此梯度下降算法(例如图形)?
import matplotlib.pyplot as plt
def sigmoid(sop):
return 1.0 / (1 + numpy.exp(-1 * sop))
def error(predicted, target):
return numpy.power(predicted - target, 2)
def error_predicted_deriv(predicted, target):
return 2 * (predicted - target)
def activation_sop_deriv(sop):
return sigmoid(sop) * (1.0 - sigmoid(sop))
def sop_w_deriv(x):
return x
def update_w(w, grad, learning_rate):
return w - learning_rate * grad
x = 0.1
target = 0.3
learning_rate = 0.01
w = numpy.random.rand()
print("Initial W : ", w)
iterations = 10000
for k in range(iterations):
# Forward Pass
y = w * x
predicted = sigmoid(y)
err = error(predicted, target)
# Backward Pass
g1 = error_predicted_deriv(predicted, target)
g2 = activation_sop_deriv(predicted)
g3 = sop_w_deriv(x)
grad = g3 * g2 * g1
# print(predicted)
w = update_w(w, grad, learning_rate)
我尝试用 matplotlib 绘制一个非常简单的图,但无法将线条实际显示出来(图形已正确初始化,但线条没有出现)。
这是我所做的:
plt.plot(iterations, predicted)
plt.ylabel("Prediction")
plt.xlabel("Iteration Number")
plt.show()
我尝试进行搜索,但发现 none 的资源适用于这种特殊的梯度下降格式。
任何帮助将不胜感激。
iterations
和 predicted
在您的代码中都是标量值,这就是您无法生成折线图的原因。您需要将它们的值存储在两个数组中以便能够绘制它们:
K = 10000
iterations = numpy.arange(K)
predicted = numpy.zeros(K)
for k in range(K):
# Forward Pass
y = w * x
predicted[k] = sigmoid(y)
err = error(predicted[k], target)
# Backward Pass
g1 = error_predicted_deriv(predicted[k], target)
g2 = activation_sop_deriv(predicted[k])
g3 = sop_w_deriv(x)
grad = g3 * g2 * g1
# print(predicted[k])
w = update_w(w, grad, learning_rate)
如何直观地显示此梯度下降算法(例如图形)?
import matplotlib.pyplot as plt
def sigmoid(sop):
return 1.0 / (1 + numpy.exp(-1 * sop))
def error(predicted, target):
return numpy.power(predicted - target, 2)
def error_predicted_deriv(predicted, target):
return 2 * (predicted - target)
def activation_sop_deriv(sop):
return sigmoid(sop) * (1.0 - sigmoid(sop))
def sop_w_deriv(x):
return x
def update_w(w, grad, learning_rate):
return w - learning_rate * grad
x = 0.1
target = 0.3
learning_rate = 0.01
w = numpy.random.rand()
print("Initial W : ", w)
iterations = 10000
for k in range(iterations):
# Forward Pass
y = w * x
predicted = sigmoid(y)
err = error(predicted, target)
# Backward Pass
g1 = error_predicted_deriv(predicted, target)
g2 = activation_sop_deriv(predicted)
g3 = sop_w_deriv(x)
grad = g3 * g2 * g1
# print(predicted)
w = update_w(w, grad, learning_rate)
我尝试用 matplotlib 绘制一个非常简单的图,但无法将线条实际显示出来(图形已正确初始化,但线条没有出现)。
这是我所做的:
plt.plot(iterations, predicted)
plt.ylabel("Prediction")
plt.xlabel("Iteration Number")
plt.show()
我尝试进行搜索,但发现 none 的资源适用于这种特殊的梯度下降格式。
任何帮助将不胜感激。
iterations
和 predicted
在您的代码中都是标量值,这就是您无法生成折线图的原因。您需要将它们的值存储在两个数组中以便能够绘制它们:
K = 10000
iterations = numpy.arange(K)
predicted = numpy.zeros(K)
for k in range(K):
# Forward Pass
y = w * x
predicted[k] = sigmoid(y)
err = error(predicted[k], target)
# Backward Pass
g1 = error_predicted_deriv(predicted[k], target)
g2 = activation_sop_deriv(predicted[k])
g3 = sop_w_deriv(x)
grad = g3 * g2 * g1
# print(predicted[k])
w = update_w(w, grad, learning_rate)