मैं निम्नलिखित फ़ंक्शन को कम करना चाहता हूं:

enter image description here

व्युत्पन्न स्पष्ट रूप से है:

enter image description here

निम्नलिखित कोड दिया गया है

import scipy
import numpy as np
def loss(theta):
    return np.sum(np.abs(theta))

def grad(theta):
    return np.sign(theta)

theta = np.ones(6)
print(scipy.optimize.fmin_bfgs(loss, theta, fprime = grad ,maxiter= 10000))

जाहिर है न्यूनतम [0,0,0,0,0,0] वापस आना चाहिए। हालांकि आउटपुट बहुत अजीब है:

[1. 1. 1. 1. 1. 1.]

और एक चेतावनी है:

Warning: Desired error not necessarily achieved due to precision loss.
         Current function value: 6.000000
         Iterations: 0
         Function evaluations: 48
         Gradient evaluations: 42

यह कैसे संभव है?

मैं आंतरिक थीटा के परिवर्तन को चकमा देने के लिए निम्नलिखित कोड का उपयोग करता हूं:

import scipy
import numpy as np
def loss(theta):
    print(theta)
    return np.sum(np.abs(theta))

def grad(theta):
    return np.sign(theta)

theta = np.ones(6)
print(scipy.optimize.fmin_bfgs(loss, theta, fprime = grad ,maxiter= 10000))

आंतरिक थीटा वास्तव में [0,0,0,0,0,0] के करीब है (यानी [-2.28862373e-07 -2.28862373e-07 -2.28862373e-07 -2.28862373e-07 -2.28862373e-07 -2.28862373e-07]) लेकिन फिर भी वापस आएं [1,1,1,1,1,1] क्यों?

पुनश्च:

  1. scipy.optimize.fmin_bfgs का API https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_bfgs.html

  2. scipy का मेरा संस्करण 1.3.1 . है

-1
maplemaple 18 जिंदा 2020, 07:47

1 उत्तर

सबसे बढ़िया उत्तर

आप कहते हैं कि व्युत्पन्न "जाहिर है" संकेत (थीटा) है, लेकिन ... ऐसा नहीं है। जब कोई भी निर्देशांक 0 होता है तो आपका फ़ंक्शन गैर-भिन्न नहीं होता है। बीएफजीएस उद्देश्य फ़ंक्शन पर लगातार भिन्न होने पर निर्भर करता है, और अद्यतन तर्क असंतोष को अच्छी तरह से संभाल नहीं पाता है।

0
user2357112 supports Monica 18 जिंदा 2020, 08:27