我想了解Adaline神经元的工作原理。
我用VB.NET编写了一个示例代码,我想为神经元训练AND函数或OR函数。
这是我的代码:
Dim Valid As Boolean
Dim c As Integer = 0
Do
Valid = True
c += 1
For i As Integer = 0 To ListBox1.Items.Count - 1
Dim s() As String = Microsoft.VisualBasic.Split(ListBox1.Items(i), " ")
Dim y As Single = (W(1) * CInt(s(0)) + W(2) * CInt(s(1)))' + W(3) * 1)
W(1) += Alpha * CSng(CInt(s(2)) - y) * CSng(CInt(s(0)))
W(2) += Alpha * CSng(CInt(s(2)) - y) * CSng(CInt(s(1)))
'W(3) += Alpha * CSng(CInt(s(2)) - y) * 1.0
Next
For i As Integer = 0 To ListBox1.Items.Count - 1
Dim s() As String = Microsoft.VisualBasic.Split(ListBox1.Items(i), " ")
Dim y As Single = (W(1) * CInt(s(0)) + W(2) * CInt(s(1)))' + W(3) * 1)
If CInt(s(2)) = 1 Then
If y < 1 Then
Valid = False
End If
Else
If y >= 1 Then
Valid = False
End If
End If
Next
Loop Until ((Valid) Or (c > 100000))
If c > 10000 Then
MsgBox("I Can't Learn!", MsgBoxStyle.Exclamation)
End If
我试着偏见而没有偏见。 (如果从注释部分中删除注释标记,则会向神经元添加偏差)
我尝试使用AND&amp; amp; OR:
-1 -1 -1
-1 1 -1
1 -1 -1
1 1 1
0 0 0
0 1 0
1 0 0
1 1 1
0 0 0
0 1 1
1 0 1
1 1 1
-1 -1 -1
-1 1 1
1 -1 1
1 1 1
但神经元无法训练任何这些训练集......
如何解决我的问题?
答案 0 :(得分:0)
问题是: 我的硬限制函数将输出更改为1,但它应该将答案更改为0。
这是代码的变化部分:
If CInt(s(2)) = 1 Then
If y < 0 Then
Valid = False
End If
Else
If y >= 0 Then
Valid = False
End If
我尝试启用偏差并成功训练了AND&amp;或功能。