Artificial intelligence 计算梯度下降循环内的导数

Artificial intelligence 计算梯度下降循环内的导数,artificial-intelligence,sympy,calculus,Artificial Intelligence,Sympy,Calculus,我对神经网络和机器学习很陌生,所以像这样简单的事情我遇到了麻烦。我正在写一个简单的程序来分类一朵花是一种还是另一种 首先,我分配了随机权重,并希望在训练循环中调整这些权重。我运行了成本函数,但似乎无法计算成本wrt对每个权重(w1和w2)和偏差的导数。我想用计算出的导数来调整我的权重和偏差。我现在正在使用Symphy,但是如果我需要使用另一个,请告诉我 import numpy as np import matplotlib.pyplot as plt import sympy as sp #

我对神经网络和机器学习很陌生,所以像这样简单的事情我遇到了麻烦。我正在写一个简单的程序来分类一朵花是一种还是另一种

首先,我分配了随机权重,并希望在训练循环中调整这些权重。我运行了成本函数,但似乎无法计算成本wrt对每个权重(w1和w2)和偏差的导数。我想用计算出的导数来调整我的权重和偏差。我现在正在使用Symphy,但是如果我需要使用另一个,请告诉我

import numpy as np
import matplotlib.pyplot as plt
import sympy as sp

# length, width, color
data = [[3, 1.5, 0], [2, 1, 1], [4, 1.5, 0], [3, 1, 1], [3.5, 0.5, 0], [2, 0.5, 1], [5.5, 1, 0], [1, 1, 1]]
mystery_flower = [4.5, 1, '?']
learning_rate = 0.01

w1 = np.random.randn()
w2 = np.random.randn()
bias = np.random.randn()


def sigmoid(x):
    return 1/(1+np.exp(-x))

for n in range(0, 10): #10 simply for testing
    random_index = np.random.randint(len(data))
    point = data[random_index]
    target = point[2]

    equation = w1*point[0] + w2*point[1] + bias
    prediction = sigmoid(equation)
    cost = (prediction - target) ** 2

    # Calculate derivaties for weights and bias wrt to cost
      dcost_dw1 = sp.diff(cost, wr1)

    # dcost_dw1 = dcost_dpred * dpred_deq * deq_dw1

    # Update weights and bias
每次尝试在循环中使用
sp.diff()
时,我都会收到一个值错误。
错误为
ValueError:无法计算导数wrt 0.962802182433288。
显然,每个循环的浮点值都会发生变化

调用
sp.diff()的位置和方式。
?请将此信息添加到您的问题中。请注意,您不能在Symphy方程式中使用
np.exp
。您需要
sp.exp
。然后,使用
lambdify
将获得的辛函数转换为numpy。@JohanC我在中添加了它。您可能需要某种数值导数,而不是符号辛函数。