2016-05-16 70 views
0

我已經試過這如何在VB上爲segmoid函數創建一個模塊?

Module module1 
    <System.Runtime.CompilerServices.Extension()> _ 
Public Function sigmoid(ByRef x As Integer, ByVal y As Integer) As Integer 
     y = 1/(1 + Math.Exp(-x)) 
     Return y 
     Return Nothing 
    End Function 
End Module 

,當我想打電話給它,我用

y3 = (x1 * w13 + x2 * w23 - seta3).sigmoid 

我只想把x作爲(X1 * W13 + X2 * W23 - seta3) 並獲得它的y值 它與神經網絡 有關,但我總是得到一個錯誤。錯在哪裏?

回答

3

我看到幾件事情,我會爲乙狀結腸功能改變:

Public Module module1 
    <System.Runtime.CompilerServices.Extension()> _ 
    Public Function Sigmoid(ByRef x As Integer) As Double 
     Return 1/(1 + Math.Exp(-x)) 
    End Function 

    <System.Runtime.CompilerServices.Extension()> _ 
    Public Function Sigmoid(ByRef x As Double) As Double 
     Return 1/(1 + Math.Exp(-x)) 
    End Function 
End Module 
  1. 擴展方法往往會更好地工作,當模塊是Public。否則,您可能無法在需要時看到該方法。
  2. Return Nothing沒有意義,因爲它直接跟在另一個return語句之後。
  3. 輸入到該函數的y從未使用,所以不要求它。
  4. 您需要一個Double,而不是Integer作爲返回類型。第一學期的1的分解表達式不可能導致可用的整數。
  5. 這意味着您還希望使用Double作爲y3變量,這反過來又讓我們想知道這裏有多少其他值真的應該是雙倍的,因此是重載方法。

現在你可以這樣調用:

y3 = (x1 * w13 + x2 * w23 - seta3).Sigmoid() 

需要注意的是在VB.Net,它調用函數時,總是使用()符號的最佳實踐。這不是必需的,但仍然是一個好習慣。這是從較舊的VB6/VBA/VBScript代碼的變化,在某些情況下使用括號會產生不良副作用。

+1

+1對於沒有投票的「沒有很好形成」的問題,並試圖理解這個問題。這是罕見的:) – Makketronix

+0

@Joel Coehoorn,謝謝你爲我解釋我感謝你的時間和精力 – AlKobtan

+0

@Makketronix我不明白你的意思:) – AlKobtan