计算循环内的导数以进行梯度下降

时间:2019-11-15 09:42:06

标签: artificial-intelligence sympy calculus

我对NN和机器学习非常陌生,所以我遇到了像这样简单的事情。我正在编写一个简单的程序,对花是一种类型还是另一种进行分类。

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

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: Can't calculate derivative wrt 0.962802182433288.显然每个循环的浮点都发生变化

0 个答案:

没有答案