📄 process.frm
字号:
Index = 0
Left = 240
TabIndex = 26
Top = 1680
Width = 1095
End
End
Begin VB.Label Label7
Height = 255
Left = 9120
TabIndex = 112
Top = 7920
Width = 375
End
Begin VB.Label Label5
Height = 375
Left = 9720
TabIndex = 111
Top = 7800
Width = 135
End
Begin VB.Label Label3
Height = 375
Left = 9960
TabIndex = 110
Top = 7800
Width = 135
End
Begin VB.Label Label2
Height = 495
Left = 480
TabIndex = 109
Top = 6720
Width = 9615
End
End
Attribute VB_Name = "process"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public patternnumber As Integer '模式数
Public neuralnumber As Integer '神经元数
Public rownumber As Integer '行
Public linenumber As Integer '列
Public learnnumber As Integer '学习次数
Private Sub Command1_Click(Index As Integer)
Dim k As Integer '算command数
If Command1(Index).Caption = 1 Then
Command1(Index).Caption = 0
ElseIf Command1(Index).Caption = 0 Then
Command1(Index).Caption = 1
End If
End Sub
Private Sub Command2_Click()
Dim n As Integer
linenumber = prepare.linenumber
rownumber = prepare.rownumber
neuralnumber = prepare.neuralnumber
learnnumber = prepare.learnnumber
patternnumber = prepare.patternnumber
'
'1, 学习模式—-决定权重.
'想要记忆的模式用-1和1表示,
'P模式的总数,ap(s)第p个模式的第s个要素(-1或1)wij: 第j个神经元与第i个神经元间的权重
'j、i间的权重:wij=∑ap(i)ap(j), i = j时,wij=0
'2, 想起模式
'神经元输出值的初始化,未知的输入,设xi(0)为未知模式的第i个要素(-1或1)初始值,0意味t=0。
'3, 反复部分
'对各神经元,计算:xi (t+1) = f (∑wijxj(t)-θi),j=1…n, j≠i,n—神经元总数,f()--Sgn(),θi—神经元i发火阈值
'反复进行,直到各个神经元的输出不再变化。
'--------------------------------------产生网络--------------------------------------------
Dim Net(2, 25) As Integer '存放状态(行*列)的数组
Dim weights(25, 25) As Integer '存放权重(神经元数*神经元数)
Dim changenumber(25) As Integer '存放更新次数
Dim threshold(25) As Double
Dim i As Integer '列
Dim j As Integer '行
Dim P As Integer '模式数
Dim state As Integer '暂时存放状态值
Dim Caption As Integer '暂时存放command.caption值
Dim k As Integer
P = 0 '第一个模式p=0
i = 0
j = 0
k = 0
'初始化域值===================================================
Randomize
For i = 0 To neuralnumber - 1 '为nn个神经元设置随机域值threshold(i) = Rnd
threshold(i) = Rnd
Next i
'===================================================
'构建net(patternnumber,neuralnumber)
'逐行逐列的将每一个学习模式的输入值装入net(p,n)的一行中,共patternnumber行,每行neuralnumber列,
While (j < rownumber) '次层(行)的循环,
i = 0
While (i < linenumber) '列循环
Caption = process.Command1(j * 5 + i).Caption
If Caption = 0 Then
state = -1 '若学习模式输入的是0则转换为-1
End If
If Caption = 1 Then
state = 1
End If
Net(P, k) = state '
i = i + 1
k = k + 1
Wend
j = j + 1
Wend
i = 0
j = 0
P = 1 '第二个模式p=1
k = 0
While (j < rownumber) '次层(行)的循环,
i = 0
While (i < linenumber) '列循环
Caption = process.Command1(99 - j * 5 - i).Caption
If Caption = 0 Then
state = -1 '若学习模式输入的是0则转换为-1
ElseIf Caption = 1 Then
state = 1
End If
Net(P, k) = state '
i = i + 1
k = k + 1
Wend
j = j + 1
Wend
'分配权重空间weights(neuralnumber,neuralnumber)
i = 0
j = 0
While (j < neuralnumber)
While (i < neuralnumber)
weights(i, j) = 0
i = i + 1
Wend
j = j + 1
i = 0
Wend
'----------------------------------------------计算权值-----------------------------------
'wij=∑ap(i)ap(j), i = j时,wij=0
Dim weight As Integer '暂时存放算得权重
i = 0 '第i个神经元
j = 0 '第j个神经元
'求每一个元素与另一个元素间的权重
While i < neuralnumber '对每个i计算它到另一个元素j的权重
j = 0
While j < neuralnumber
weight = 0
k = 0 '模式数
If i <> j Then
While k < patternnumber
weight = weight + Net(k, i) * Net(k, j) '任意两个元素ij间权重wij=∑ap(i)ap(j)
k = k + 1
Wend
End If
weights(i, j) = weight '两元素间的权重
j = j + 1
Wend
i = i + 1
Wend
'******************************************测试weights()
i = 0
j = 0
While i < neuralnumber '对每个i计算它到另一个元素j的权重
j = 0
While j < neuralnumber
Label5.Caption = weights(i, j)
Label4.Caption = Label4.Caption + Label5.Caption
j = j + 1
Wend
Label4.Caption = Label4.Caption + Chr(10) & Chr(13) '两元素间的权重
i = i + 1
Wend
'********************************************************
'--------------------------传播单元(传入的第i单元经计算得出的输出)-------------------
'传入第i个神经元,算出其输出
Dim sum As Integer '计算和
Dim out As Integer '暂时存放输出值
Dim changed As Boolean '是否修改
Dim output(25) As Integer
changed = False
sum = 0
k = 0
i = 0
j = 0
P = 0
'初始化output()
While (j < rownumber)
While (i < linenumber)
P = j * rownumber + i '存入到output()中的第j处
k = 49 - j * 5 - i '取输入位置
If Command1(k).Caption = 1 Then
output(P) = 1
End If
If Command1(k).Caption = 0 Then
output(P) = -1
End If
i = i + 1
Wend
j = j + 1
i = 0
Wend
k = 0
'xi (t+1) = f (∑wijxj(t)-θi),j=1…n, j≠i,n神经元总数,f()--Sgn()
Randomize
While k < learnnumber '学习次数
j = 0 '第j个神经元
sum = 0
' i = InitializeRandoms() '产生随机数的函数
i = (neuralnumber) * Rnd
changenumber(i) = changenumber(i) + 1
Label3.Caption = i
Label2.Caption = Label2.Caption + Label3.Caption
While j < neuralnumber '每个元素的输出值
sum = sum + weights(i, j) * output(j)
j = j + 1
Wend
sum = sum - threshold(i)
If (sum = 0) Then
out = 1
End If
If (sum < 0) Then
out = -1
End If 'sum小于域值,输出值置-1
If (sum > 0) Then
out = 1
End If 'sum大于域值,输出值置1
output(i) = out '网络的输出值改为新的输出值
k = k + 1
Wend
'-----------------------------------------显示结果----------------------------------
i = 0
j = 0
k = 0
While (j < rownumber)
While (i < linenumber)
k = 74 - j * 5 - i
Command1(k).Visible = True
If output(rownumber * j + i) = 1 Then
Command1(k).Caption = 1
End If
If output(rownumber * j + i) = -1 Then
Command1(k).Caption = 0
End If
i = i + 1
Wend
j = j + 1
i = 0
Wend
'-----------------------显示更新次数----------------------
i = 0
j = 0
For i = 0 To rownumber - 1
For j = 0 To linenumber - 1
Command4(i * 5 + j).Caption = changenumber(i * linenumber + j)
Next j
Next i
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim i As Integer '算列数linenumber
Dim j As Integer '算行数rownumber
Dim k As Integer '算command数
i = 0
j = 0
k = 0
'学习样本1初始化
linenumber = prepare.linenumber
rownumber = prepare.rownumber
neuralnumber = prepare.neuralnumber
learnnumber = prepare.learnnumber
patternnumber = prepare.patternnumber
For i = 0 To 99
Command1(i).Visible = False
Next i
i = 0
For i = 0 To 24
Command4(i).Visible = False
Next i
i = 0
While (j < rownumber)
While (i < linenumber)
k = j * 5 + i
Command1(k).Visible = True
Command4(k).Visible = True
Command1(k).Caption = 1
i = i + 1
Wend
j = j + 1
i = 0
Wend
'学习样本2初始化
i = 0
j = 0
k = 0
While (j < rownumber)
While (i < linenumber)
k = 99 - j * 5 - i
Command1(k).Visible = True
Command1(k).Caption = 1
i = i + 1
Wend
j = j + 1
i = 0
Wend
'初始状态初始化
i = 0
j = 0
While (j < rownumber)
While (i < linenumber)
k = 49 - j * 5 - i
Command1(k).Visible = True
Command1(k).Caption = 1
i = i + 1
Wend
j = j + 1
i = 0
Wend
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -