【发布时间】:2019-08-02 03:40:22
【问题描述】:
我正在尝试构建一个简单的神经网络,它有 3 个输入、3 个输出,并且没有深层,它将执行梯度下降来调整其权重,并能够将输入数组转换为输出数组。由于某种原因它不起作用(预测在几次迭代后停止变化),我似乎无法弄清楚为什么。你能帮帮我吗?
当我有 1 个输入和 3 个输出,或 3 个输出和 1 个输入时,类似的代码可以工作。我曾经这样计算导数:derivatives = inputs * pure_error。但现在我需要对权重矩阵执行此操作,我使用的是derivatives = np.outer(inputs, pure_errors),这是我所做的唯一更改。
代码:
import numpy as np
inputs = np.array([3, 5, 1])
weights = np.array([[0.1,0.2,0.05],
[1.0,0.53,0.5],
[1.7,2.3,1.2]])
target_predictions = np.array([1.5, 10, 93])
learning_rate = 0.05
def ann(inputs, weights):
predictions = np.dot(weights, inputs)
return predictions
# Initial Predictions
predictions = ann(inputs, weights)
errors = (predictions - target_predictions) ** 2
print("Predictions:",predictions, "Errors:",errors)
for i in range(350):
predictions = ann(inputs, weights)
errors = (predictions - target_predictions) ** 2
print("Predictions:",predictions, "Error:",errors)
pure_errors = predictions - target_predictions
derivatives = np.outer(inputs, pure_errors)
weight_updates = derivatives * learning_rate
weights -= weight_updates
输出:
Predictions: [ 1.35 6.15 17.8 ] Error: [2.25000e-02 1.48225e+01 5.65504e+03]
Predictions: [15.585 29.875 22.545] Error: [ 198.387225 395.015625 4963.907025]
Predictions: [ 4.90875 12.08125 18.98625] Error: [1.16195766e+01 4.33160156e+00 5.47803519e+03]
.......
Predictions: [ 9.48428571 19.70714286 20.51142857] Error: [ 63.74881837 94.22862245 5254.59298776]
Predictions: [ 9.48428571 19.70714286 20.51142857] Error: [ 63.74881837 94.22862245 5254.59298776]
Predictions: [ 9.48428571 19.70714286 20.51142857] Error: [ 63.74881837 94.22862245 5254.59298776]
【问题讨论】:
-
您有 3 个大小为 1 的输入,因此您只需要一个权重和一个偏差。
标签: python numpy machine-learning neural-network