2016-05-16 52 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