返回列表 上一主題 發帖

VBA 類神經運算 求助

回復 7# qwertyuio111
  1. Sub 類神經擴充迴圈運算()
  2.     Dim cts As Integer, nxt As Integer
  3.     Dim rp5 As Integer, bf1 As Integer, i As Integer
  4.    
  5.     With Sheets("Sheet1")
  6.        For i = 2 To 150    ' 1500
  7.            .[A23] = "循環W (" & i & ")"
  8.            For cts = 0 To 7     '  inta1 = (intA * neww1) + (intB * neww9) + (intc * neww17) + (intD * neww25) + (intE * neww33)
  9.                .[D1].Offset(cts) = (.[B1] * .[A24].Offset(cts)) + (.[B2] * IIf(cts = 0, .[A32], .[B23].Offset(cts))) + (.[B3] * IIf(cts <= 1, .[B31], .[C22].Offset(cts)) + (.[B4] * IIf(cts <= 2, .[C30], .[D21].Offset(cts)))) + (.[B5] * IIf(cts <= 3, .[D29], .[E20].Offset(cts)))
  10.                .[F1].Offset(cts) = 1 / (1 + Exp(-.[D1].Offset(cts)))   '  outa1 = 1 / (1 + Exp(-inta1))
  11.            Next cts

  12.            For cts = 0 To 4     '  inti1 = (outa1 * neww41) + (outb1 * neww46) + (outc1 * neww51) + (outd1 * neww56) + (oute1 * neww61) + (outf1 * neww66) + (outg1 * neww71) + (outh1 * neww76)
  13.            .[H1].Offset(cts) = (.[F1] * .[E28].Offset(cts)) + (.[F2] * .[F24].Offset(cts)) + (.[F3] * IIf(cts = 4, .[G24], .[F29].Offset(cts))) + (.[F4] * .[G25].Offset(cts)) + (.[F5] * IIf(cts > 2, .[H21].Offset(cts), .[G30].Offset(cts))) + (.[F6] * .[H26].Offset(cts)) + (.[F7] * IIf(cts > 1, .[I22].Offset(cts), .[H31].Offset(cts))) + (.[F8] * .[I27].Offset(cts))
  14.                .[J1].Offset(cts) = 1 / (1 + Exp(-.[H1].Offset(cts)))     '  outi1 = 1 / (1 + Exp(-inti1))
  15.            Next cts
  16.    
  17.            For cts = 0 To 1     '  intn1 = (outi1 * neww81) + (outj1 * neww83) + (outk1 * neww85) + (outl1 * neww87) + (outm1 * neww89)
  18.                .[L1].Offset(cts) = (.[J1] * IIf(cts = 0, .[I32], .[J24])) + (.[J2] * .[J25].Offset(cts)) + (.[J3] * .[J27].Offset(cts)) + (.[J4] * .[J29].Offset(cts)) + (.[J5] * .[J31].Offset(cts))
  19.                .[N1].Offset(cts) = 1 / (1 + Exp(-.[L1].Offset(cts)))     '  outn1 = 1 / (1 + Exp(-intn1))
  20.            Next cts
  21.       
  22.            For cts = 0 To 1     '  errn = outn1 * (1 - outn1) * (tarn - outn1) ,   erro = outo1 * (1 - outo1) * (taro - outo1)
  23.                .[N5].Offset(cts) = .[N1].Offset(cts) * (1 - .[N1].Offset(cts)) * (.[L6].Offset(cts) - .[N1].Offset(cts))
  24.            Next cts
  25.       
  26.            For cts = 0 To 4     '  erri = outi1 * (1 - outi1) * (errn * neww81 + erro * neww82)   ~   errm = outm1 * (1 - outm1) * (errn * neww89 + erro * neww90)
  27.                .[P5].Offset(cts) = .[J1].Offset(cts) * (1 - .[J1].Offset(cts)) * (.[N5] * IIf(cts = 0, .[I32], .[J20].Offset(cts * 2 + 1))) + (.[N6] * .[J22].Offset(cts * 2 + 2))
  28.            Next cts
  29.       
  30.            For cts = 0 To 7     '  erra = outa1 * (1 - outa1) * (erri * w41 + errj * w42 + errk * w43 + errl * w44 + errm * w45)
  31.                 .Range("Z1:Z5").Clear    '  清除傳存運算資料欄之內容值
  32.             
  33.                 If (cts = 7) Then       '  7
  34.                    .[Z1] = .[I27]
  35.                    .[Z2] = .[I28]
  36.                 ElseIf (cts > 4) Then   '  5,6
  37.                    .[Z1] = .[H26].Offset((cts - 5) * 5)
  38.                    .[Z2] = .[H27].Offset((cts - 5) * 5)
  39.                 ElseIf (cts > 2) Then   '  3,4
  40.                    .[Z1] = .[G25].Offset((cts - 3) * 5)
  41.                    .[Z2] = .[G26].Offset((cts - 3) * 5)
  42.                 ElseIf (cts = 0) Then   '  0
  43.                    .[Z1] = .[E28]
  44.                    .[Z2] = .[E29]
  45.                    .[Z3] = .[E30]
  46.                 Else                    '  1,2
  47.                    .[Z1] = .[F24].Offset((cts - 1) * 5)
  48.                    .[Z2] = .[F25].Offset((cts - 1) * 5)
  49.                 End If

  50.                 If (cts > 5) Then       '  6,7
  51.                    .[Z3] = .[I24].Offset((cts - 6) * 5)
  52.                    .[Z4] = .[I25].Offset((cts - 6) * 5)
  53.                    .[Z5] = .[I26].Offset((cts - 6) * 5)
  54.                 ElseIf (cts = 5) Then   '  5
  55.                    .[Z3] = .[H28]
  56.                    .[Z4] = .[H24].Offset((cts - 5) * 5)
  57.                    .[Z5] = .[H25].Offset((cts - 5) * 5)
  58.                 ElseIf (cts > 3) Then    '  4
  59.                    .[Z3] = .[G27].Offset((cts - 4) * 5)
  60.                    .[Z4] = .[H24].Offset((cts - 4) * 5)
  61.                    .[Z5] = .[H25].Offset((cts - 4) * 5)
  62.                 ElseIf (cts = 3) Then    '  3
  63.                    .[Z3] = .[G27].Offset((cts - 3) * 5)
  64.                    .[Z4] = .[G26]
  65.                    .[Z5] = .[H25].Offset((cts - 3) * 5)
  66.                 ElseIf (cts > 1) Then    '  2
  67.                    .[Z3] = .[F26].Offset((cts - 2) * 5)
  68.                    .[Z4] = .[F27].Offset((cts - 2) * 5)
  69.                    .[Z5] = .[G24].Offset((cts - 2) * 5)
  70.                 ElseIf (cts = 0) Then    '  0
  71.                    .[Z3] = .[E30]
  72.                    .[Z4] = .[E31]
  73.                    .[Z5] = .[E32]
  74.                 Else                      '  1
  75.                    .[Z3] = .[F26].Offset((cts - 1) * 5)
  76.                    .[Z4] = .[F27].Offset((cts - 1) * 5)
  77.                    .[Z5] = .[F28]
  78.                 End If
  79.             
  80.             
  81.                 .[R5].Offset(cts) = .[F1].Offset(cts) * (1 - .[F1].Offset(cts)) * (.[P5] * .[Z1] + .[P6] * .[Z2] + .[P7] * .[Z3] + .[P8] * .[Z4] + .[P9] * .[Z5])
  82.                 '  檢驗測試結果
  83.                 '  .[V10].Offset(cts) = .[Z1]
  84.                 '  .[V10].Offset(cts, 1) = .[Z2]
  85.                 '  .[V10].Offset(cts, 2) = .[Z3]
  86.                 '  .[V10].Offset(cts, 3) = .[Z4]
  87.                 '  .[V10].Offset(cts, 4) = .[Z5]
  88.            Next cts
  89.    
  90.            .Range("Z1:Z5").Clear         '  清除傳存運算資料欄之內容值
  91.            '  .Range("V10:Z17").Clear    '  清除傳存運算資料欄之內容值

  92.            rp5 = -1: bf1 = 0
  93.            For nxt = 0 To 9         '  neww1 = neww1 + (erra * intA)   ~  neww54 = neww54 + (errl * outc1)
  94.                For cts = 0 To 8
  95.                    rp5 = rp5 + 1

  96.                    If ((nxt * 9 + cts + 1) > 80) Then          '  neww81 = neww81 + (errn * outi1) ~ neww90 = neww90 + (erro * outm1)
  97.                        If ((nxt * 9 + cts + 1) = 81) Then
  98.                            rp5 = 0
  99.                            bf1 = 0
  100.                        End If
  101.                   
  102.                        .[A24].Offset(cts, nxt) = .[A24].Offset(cts, nxt) + (.[N5].Offset(rp5) * .[J1].Offset(bf1))
  103.                   
  104.                        If (rp5 = 1) Then
  105.                            rp5 = -1
  106.                            bf1 = bf1 + 1
  107.                        End If
  108.                    ElseIf ((nxt * 9 + cts + 1) > 40) Then      '  neww41 = neww41 + (erri * outa1) ~ neww80 = neww80 + (errm * outh1)
  109.                        If ((nxt * 9 + cts + 1) = 41) Then
  110.                            rp5 = 0
  111.                            bf1 = 0
  112.                        End If
  113.                   
  114.                        .[A24].Offset(cts, nxt) = .[A24].Offset(cts, nxt) + (.[P5].Offset(rp5) * .[F1].Offset(bf1))
  115.                   
  116.                        If (rp5 = 4) Then
  117.                            rp5 = -1
  118.                            bf1 = bf1 + 1
  119.                        End If
  120.                    Else                                        '  neww1 = neww1 + (erra * intA) ~ neww40 = neww40 + (errh * intE)
  121.                        .[A24].Offset(cts, nxt) = .[A24].Offset(cts, nxt) + (.[R5].Offset(rp5) * .[B1].Offset(bf1))
  122.                        
  123.                        If (rp5 = 7) Then
  124.                            rp5 = -1
  125.                            bf1 = bf1 + 1
  126.                        End If
  127.                    End If
  128.                Next cts
  129.            Next nxt
  130.        Next i
  131.    End With
  132. End Sub
複製代碼

TOP

本帖最後由 c_c_lai 於 2015-11-24 11:32 編輯

回復 7# qwertyuio111
試試看 (依據你的程式碼修改):
  1. Sub 類神經運算()
  2.     Dim lowerRange, upperRange, myRange, myCell As Range, cts As Integer, nxt As Integer
  3.     Dim rp5 As Integer, bf1 As Integer
  4.    
  5.     With Sheets("Sheet1")
  6.         Set lowerRange = .Range("C11")
  7.         Set upperRange = .Range("C10")
  8.         lowerRange.Name = "lowerbound"
  9.         upperRange.Name = "upperbound"
  10.         Set myRange = .Range("A13:J21")

  11.         For Each myCell In myRange
  12.             myCell.Formula = "=RANDBETWEEN(lowerbound,upperbound)/10"
  13.         Next
  14.    
  15.        .[A23] = "循環W"
  16.            
  17.        For cts = 0 To 7     '  inta1 = (intA * w1) + (intB * w9) + (intc * w17) + (intD * w25) + (intE * w33)
  18.            .[D1].Offset(cts) = (.[B1] * .[A13].Offset(cts)) + (.[B2] * IIf(cts = 0, .[A21], .[B12].Offset(cts))) + (.[B3] * IIf(cts <= 1, .[B20], .[C11].Offset(cts)) + (.[B4] * IIf(cts <= 2, .[C19], .[D10].Offset(cts)))) + (.[B5] * IIf(cts <= 3, .[D18], .[E9].Offset(cts)))
  19.            .[F1].Offset(cts) = 1 / (1 + Exp(-.[D1].Offset(cts)))   '  outa1 = 1 / (1 + Exp(-inta1))
  20.        Next cts

  21.        For cts = 0 To 4     '  inti1 = (outa1 * w41) + (outb1 * w46) + (outc1 * w51) + (outd1 * w56) + (oute1 * w61) + (outf1 * w66) + (outg1 * w71) + (outh1 * w76)
  22.            .[H1].Offset(cts) = (.[F1] * .[E17].Offset(cts)) + (.[F2] * .[F13].Offset(cts)) + (.[F3] * IIf(cts = 4, .[G13], .[F18].Offset(cts))) + (.[F4] * .[G14].Offset(cts)) + (.[F5] * IIf(cts > 2, .[H10].Offset(cts), .[G19].Offset(cts))) + (.[F6] * .[H15].Offset(cts)) + (.[F7] * IIf(cts > 1, .[I11].Offset(cts), .[H20].Offset(cts))) + (.[F8] * .[I16].Offset(cts))
  23.            .[J1].Offset(cts) = 1 / (1 + Exp(-.[H1].Offset(cts)))     '  outi1 = 1 / (1 + Exp(-inti1))
  24.        Next cts
  25.    
  26.        For cts = 0 To 1     '  intn1 = (outi1 * w81) + (outj1 * w83) + (outk1 * w85) + (outl1 * w87) + (outm1 * w89)
  27.            .[L1].Offset(cts) = (.[J1] * IIf(cts = 0, .[I21], .[J13])) + (.[J2] * .[J14].Offset(cts)) + (.[J3] * .[J16].Offset(cts)) + (.[J4] * .[J18].Offset(cts)) + (.[J5] * .[J20].Offset(cts))
  28.            .[N1].Offset(cts) = 1 / (1 + Exp(-.[L1].Offset(cts)))     '  outn1 = 1 / (1 + Exp(-intn1))
  29.        Next cts
  30.       
  31.        For cts = 0 To 1     '  errn = outn1 * (1 - outn1) * (tarn - outn1) ,   erro = outo1 * (1 - outo1) * (taro - outo1)
  32.            .[N5].Offset(cts) = .[N1].Offset(cts) * (1 - .[N1].Offset(cts)) * (.[L6].Offset(cts) - .[N1].Offset(cts))
  33.        Next cts
  34.       
  35.        For cts = 0 To 4     '  erri = outi1 * (1 - outi1) * (errn * w81 + erro * w82)   ~   errm = outm1 * (1 - outm1) * (errn * w89 + erro * w90)
  36.            .[P5].Offset(cts) = .[J1].Offset(cts) * (1 - .[J1].Offset(cts)) * (.[N5] * IIf(cts = 0, .[I21], .[J9].Offset(cts * 2 + 1))) + (.[N6] * .[J11].Offset(cts * 2 + 2))
  37.        Next cts
  38.       
  39.        For cts = 0 To 7     '  erra = outa1 * (1 - outa1) * (erri * w41 + errj * w42 + errk * w43 + errl * w44 + errm * w45)
  40.             .Range("Z1:Z5").Clear    '  清除傳存運算資料欄之內容值
  41.             
  42.             If (cts = 7) Then       '  7
  43.                .[Z1] = .[I16]
  44.                .[Z2] = .[I17]
  45.             ElseIf (cts > 4) Then   '  5,6
  46.                .[Z1] = .[H15].Offset((cts - 5) * 5)
  47.                .[Z2] = .[H16].Offset((cts - 5) * 5)
  48.             ElseIf (cts > 2) Then   '  3,4
  49.                .[Z1] = .[G14].Offset((cts - 3) * 5)
  50.                .[Z2] = .[G15].Offset((cts - 3) * 5)
  51.             ElseIf (cts = 0) Then   '  0
  52.                .[Z1] = .[E17]
  53.                .[Z2] = .[E18]
  54.                .[Z3] = .[E19]
  55.             Else                    '  1,2
  56.                .[Z1] = .[F13].Offset((cts - 1) * 5)
  57.                .[Z2] = .[F14].Offset((cts - 1) * 5)
  58.             End If

  59.             If (cts > 5) Then       '  6,7
  60.                .[Z3] = .[I13].Offset((cts - 6) * 5)
  61.                .[Z4] = .[I14].Offset((cts - 6) * 5)
  62.                .[Z5] = .[I15].Offset((cts - 6) * 5)
  63.             ElseIf (cts = 5) Then   '  5
  64.                .[Z3] = .[H17]
  65.                .[Z4] = .[H13].Offset((cts - 5) * 5)
  66.                .[Z5] = .[H14].Offset((cts - 5) * 5)
  67.             ElseIf (cts > 3) Then    '  4
  68.                .[Z3] = .[G16].Offset((cts - 4) * 5)
  69.                .[Z4] = .[H13].Offset((cts - 4) * 5)
  70.                .[Z5] = .[H14].Offset((cts - 4) * 5)
  71.             ElseIf (cts = 3) Then    '  3
  72.                .[Z3] = .[G16].Offset((cts - 3) * 5)
  73.                .[Z4] = .[G15]
  74.                .[Z5] = .[H14].Offset((cts - 3) * 5)
  75.             ElseIf (cts > 1) Then    '  2
  76.                .[Z3] = .[F15].Offset((cts - 2) * 5)
  77.                .[Z4] = .[F16].Offset((cts - 2) * 5)
  78.                .[Z5] = .[G13].Offset((cts - 2) * 5)
  79.             ElseIf (cts = 0) Then    '  0
  80.                .[Z3] = .[E19]
  81.                .[Z4] = .[E20]
  82.                .[Z5] = .[E21]
  83.             Else                      '  1
  84.                .[Z3] = .[F15].Offset((cts - 1) * 5)
  85.                .[Z4] = .[F16].Offset((cts - 1) * 5)
  86.                .[Z5] = .[F17]
  87.             End If
  88.             
  89.             
  90.             .[R5].Offset(cts) = .[F1].Offset(cts) * (1 - .[F1].Offset(cts)) * (.[P5] * .[Z1] + .[P6] * .[Z2] + .[P7] * .[Z3] + .[P8] * .[Z4] + .[P9] * .[Z5])
  91.             '  檢驗測試結果
  92.             '  .[V10].Offset(cts) = .[Z1]
  93.             '  .[V10].Offset(cts, 1) = .[Z2]
  94.             '  .[V10].Offset(cts, 2) = .[Z3]
  95.             '  .[V10].Offset(cts, 3) = .[Z4]
  96.             '  .[V10].Offset(cts, 4) = .[Z5]
  97.        Next cts
  98.    
  99.        .Range("Z1:Z5").Clear         '  清除傳存運算資料欄之內容值
  100.        '  .Range("V10:Z17").Clear    '  清除傳存運算資料欄之內容值

  101.        rp5 = -1: bf1 = 0
  102.        For nxt = 0 To 9         '  neww1 = w1 + (erra * intA)   ~  neww54 = w54 + (errl * outc1)
  103.            For cts = 0 To 8
  104.                rp5 = rp5 + 1

  105.                If ((nxt * 9 + cts + 1) > 80) Then          '  neww81 = w81 + (errn * outi1) ~ neww90 = w90 + (erro * outm1)
  106.                    If ((nxt * 9 + cts + 1) = 81) Then
  107.                        rp5 = 0
  108.                        bf1 = 0
  109.                    End If
  110.                   
  111.                    .[A24].Offset(cts, nxt) = .[A13].Offset(cts) + (.[N5].Offset(rp5) * .[J1].Offset(bf1))
  112.                   
  113.                    If (rp5 = 1) Then
  114.                        rp5 = -1
  115.                        bf1 = bf1 + 1
  116.                    End If
  117.                ElseIf ((nxt * 9 + cts + 1) > 40) Then      '  neww41 = w41 + (erri * outa1) ~ neww80 = w80 + (errm * outh1)
  118.                    If ((nxt * 9 + cts + 1) = 41) Then
  119.                        rp5 = 0
  120.                        bf1 = 0
  121.                    End If
  122.                   
  123.                    .[A24].Offset(cts, nxt) = .[A13].Offset(cts) + (.[P5].Offset(rp5) * .[F1].Offset(bf1))
  124.                   
  125.                    If (rp5 = 4) Then
  126.                        rp5 = -1
  127.                        bf1 = bf1 + 1
  128.                    End If
  129.                Else                                        '  neww1 = w1 + (erra * intA) ~ neww40 = w40 + (errh * intE)
  130.                    .[A24].Offset(cts, nxt) = .[A13].Offset(cts) + (.[R5].Offset(rp5) * .[B1].Offset(bf1))
  131.                   
  132.                    If (rp5 = 7) Then
  133.                        rp5 = -1
  134.                        bf1 = bf1 + 1
  135.                    End If
  136.                End If
  137.            Next cts
  138.        Next nxt
  139.    End With
  140.   類神經擴充迴圈運算
  141. End Sub
複製代碼

TOP

回復 7# qwertyuio111


修改你的程式碼 試試看
  1. Option Explicit  '在模組層次中強迫每個在模組�堛瘍僂くㄔ眸楨�確的宣告
  2. Sub test()
  3.     Dim Sh As Worksheet, w(), i As Integer
  4.     Dim out As Single, ina1 As Single, inb1 As Single, ina2 As Single, outa2 As Single
  5.     Dim inc As Single, outc As Single, oute As Single, oute1 As Single, oute2 As Single
  6.     Dim inb2 As Single, outb2 As Single
  7.     Set Sh = Sheets("Sheet1")
  8.     out = Sh.Cells(1, 2)
  9.     ina1 = Sh.Cells(3, 2)
  10.     inb1 = Sh.Cells(5, 2)
  11.     w = Application.WorksheetFunction.Transpose(Sh.Range("b7").Resize(6))
  12.    
  13.     ina2 = (ina1 * w(3)) + (inb1 * w(4))
  14.     outa2 = 1 / (1 + Exp(-ina2))
  15.     inb2 = (ina1 * w(5)) + (inb1 * w(6))
  16.     outb2 = 1 / (1 + Exp(-inb2))
  17.     inc = (outa2 * w(1)) + (outb2 * w(2))
  18.     outc = 1 / (1 + Exp(-inc))
  19.     oute = (out - outc) * (1 - outc) * (outc)
  20.     w(1) = w(1) + (oute * outa2)
  21.     w(2) = w(2) + (oute * outb2)
  22.     oute1 = oute * w(1) * (1 - outa2) * outa2
  23.     oute2 = oute * w(2) * (1 - outb2) * outb2
  24.     w(3) = w(3) + (oute1 * ina1)
  25.     w(4) = w(4) + (oute1 * inb1)
  26.     w(5) = w(5) + (oute2 * ina1)
  27.     w(6) = w(6) + (oute2 * inb1)
  28. '***********************************************
  29.     For i = 2 To 300
  30.         ina2 = (ina1 * w(3)) + (inb1 * w(4))
  31.         outa2 = 1 / (1 + Exp(-ina2))
  32.         inb2 = (ina1 * w(5)) + (inb1 * w(6))
  33.         outb2 = 1 / (1 + Exp(-inb2))
  34.         inc = (outa2 * w(1)) + (outb2 * w(2))
  35.         outc = 1 / (1 + Exp(-inc))
  36.         oute = (out - outc) * (1 - outc) * (outc)
  37.         w(1) = w(1) + (oute * outa2)
  38.         w(2) = w(2) + (oute * outb2)
  39.         oute1 = oute * w(1) * (1 - outa2) * outa2
  40.         oute2 = oute * w(2) * (1 - outb2) * outb2
  41.         w(3) = w(3) + (oute1 * ina1)
  42.         w(4) = w(4) + (oute1 * inb1)
  43.         w(5) = w(5) + (oute2 * ina1)
  44.         w(6) = w(6) + (oute2 * inb1)
  45.     Next
  46.     ''''''''''''''''''''''''''''
  47.     With Sh
  48.         .Cells(14, 2) = ina2
  49.         .Cells(15, 2) = outa2
  50.         .Cells(17, 2) = inb2
  51.         .Cells(18, 2) = outb2
  52.         .Cells(20, 2) = inc
  53.         .Cells(21, 2) = outc
  54.         '''''''''''''''''''''''''''''
  55.         .Cells(23, 2) = oute
  56.         .Cells(25, 2) = w(1)
  57.         .Cells(26, 2) = w(2)
  58.         ''''''''''''''''''''''''
  59.         .Cells(29, 2) = oute1
  60.         .Cells(30, 2) = oute2
  61.         ''''''''''''''''''''
  62.         .Cells(32, 2) = w(3)
  63.         .Cells(33, 2) = w(4)
  64.         .Cells(34, 2) = w(5)
  65.         .Cells(35, 2) = w(6)
  66.     End With
  67. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# GBKEE


    類神經網路 是一種模擬運算的邏輯,藉由模擬運算及訓練的過程找到可能解的產生。

如圖所示


然而在訓練的過程,必透過已知的資料(輸入層的數值以及輸出層之目標值)重覆運算誤差值,去求出隱藏層所佔的比重。


運算式的長短會因為層數及 輸入數目的不同而有所改變。
目的是找出經過許多已知資料所模擬出最佳w。再獲得新的資料時,輸入後透過運算(w)求得最佳的outpot輸出
附上圖片例題的運算excel
類神經例題(迴圈運算).zip (133.49 KB)

TOP

回復 5# qwertyuio111
可否詳說, 類神經運算 公式的規律邏輯.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# qwertyuio111

版主 GBKEE
  小弟 我已附上Excel 壓縮檔案
求解 QAQ∼∼謝謝

類神經擴充 迴圈運算.zip (56.13 KB)

TOP

迴圈運算程式碼 記憶體釋放(求解)

本帖最後由 qwertyuio111 於 2015-11-21 19:31 編輯

大家好 我有個迴圈模擬運算的問題
會有自行輸入運算次數(Worksheets("Sheet1").Range("J9"))
因為重複 「讀取」及「輸入」數值的過程,造成記憶體不足。
請問 要增加哪個程式碼或改成怎麼樣的寫法會比較好呢?
才能夠解決 記憶體不足的問題呀?
以下為部分程式碼
  1. For i = 2 To Worksheets("Sheet1").Range("J9")
  2. intA = Worksheets("Sheet1").Range("B1")
  3. intB = Worksheets("Sheet1").Range("B2")
  4. intc = Worksheets("Sheet1").Range("B3")
  5. intD = Worksheets("Sheet1").Range("B4")
  6. intE = Worksheets("Sheet1").Range("B5")
  7. tarn = Worksheets("Sheet1").Range("L6")
  8. taro = Worksheets("Sheet1").Range("L7")

  9. neww1 = Worksheets("Sheet1").Range("A24")
  10. neww2 = Worksheets("Sheet1").Range("A25")
  11. neww3 = Worksheets("Sheet1").Range("A26")
  12. neww4 = Worksheets("Sheet1").Range("A27")
  13. neww5 = Worksheets("Sheet1").Range("A28")
  14. neww6 = Worksheets("Sheet1").Range("A29")
  15. neww7 = Worksheets("Sheet1").Range("A30")
  16. neww8 = Worksheets("Sheet1").Range("A31")
  17. neww9 = Worksheets("Sheet1").Range("A32")

  18. neww10 = Worksheets("Sheet1").Range("B24")
  19. neww11 = Worksheets("Sheet1").Range("B25")
  20. neww12 = Worksheets("Sheet1").Range("B26")
  21. neww13 = Worksheets("Sheet1").Range("B27")
  22. neww14 = Worksheets("Sheet1").Range("B28")
  23. neww15 = Worksheets("Sheet1").Range("B29")
  24. neww16 = Worksheets("Sheet1").Range("B30")
  25. neww17 = Worksheets("Sheet1").Range("B31")
  26. neww18 = Worksheets("Sheet1").Range("B32")

  27. neww19 = Worksheets("Sheet1").Range("C24")
  28. neww20 = Worksheets("Sheet1").Range("C25")
  29. neww21 = Worksheets("Sheet1").Range("C26")
  30. neww22 = Worksheets("Sheet1").Range("C27")
  31. neww23 = Worksheets("Sheet1").Range("C28")
  32. neww24 = Worksheets("Sheet1").Range("C29")
  33. neww25 = Worksheets("Sheet1").Range("C30")
  34. neww26 = Worksheets("Sheet1").Range("C31")
  35. neww27 = Worksheets("Sheet1").Range("C32")

  36. neww28 = Worksheets("Sheet1").Range("D24")
  37. neww29 = Worksheets("Sheet1").Range("D25")
  38. neww30 = Worksheets("Sheet1").Range("D26")
  39. neww31 = Worksheets("Sheet1").Range("D27")
  40. neww32 = Worksheets("Sheet1").Range("D28")
  41. neww33 = Worksheets("Sheet1").Range("D29")
  42. neww34 = Worksheets("Sheet1").Range("D30")
  43. neww35 = Worksheets("Sheet1").Range("D31")
  44. neww36 = Worksheets("Sheet1").Range("D32")

  45. neww37 = Worksheets("Sheet1").Range("E24")
  46. neww38 = Worksheets("Sheet1").Range("E25")
  47. neww39 = Worksheets("Sheet1").Range("E26")
  48. neww40 = Worksheets("Sheet1").Range("E27")
  49. neww41 = Worksheets("Sheet1").Range("E28")
  50. neww42 = Worksheets("Sheet1").Range("E29")
  51. neww43 = Worksheets("Sheet1").Range("E30")
  52. neww44 = Worksheets("Sheet1").Range("E31")
  53. neww45 = Worksheets("Sheet1").Range("E32")

  54. neww46 = Worksheets("Sheet1").Range("F24")
  55. neww47 = Worksheets("Sheet1").Range("F25")
  56. neww48 = Worksheets("Sheet1").Range("F26")
  57. neww49 = Worksheets("Sheet1").Range("F27")
  58. neww50 = Worksheets("Sheet1").Range("F28")
  59. neww51 = Worksheets("Sheet1").Range("F29")
  60. neww52 = Worksheets("Sheet1").Range("F30")
  61. neww53 = Worksheets("Sheet1").Range("F31")
  62. neww54 = Worksheets("Sheet1").Range("F32")

  63. neww55 = Worksheets("Sheet1").Range("G24")
  64. neww56 = Worksheets("Sheet1").Range("G25")
  65. neww57 = Worksheets("Sheet1").Range("G26")
  66. neww58 = Worksheets("Sheet1").Range("G27")
  67. neww59 = Worksheets("Sheet1").Range("G28")
  68. neww60 = Worksheets("Sheet1").Range("G29")
  69. neww61 = Worksheets("Sheet1").Range("G30")
  70. neww62 = Worksheets("Sheet1").Range("G31")
  71. neww63 = Worksheets("Sheet1").Range("G32")

  72. neww64 = Worksheets("Sheet1").Range("H24")
  73. neww65 = Worksheets("Sheet1").Range("H25")
  74. neww66 = Worksheets("Sheet1").Range("H26")
  75. neww67 = Worksheets("Sheet1").Range("H27")
  76. neww68 = Worksheets("Sheet1").Range("H28")
  77. neww69 = Worksheets("Sheet1").Range("H29")
  78. neww70 = Worksheets("Sheet1").Range("H30")
  79. neww71 = Worksheets("Sheet1").Range("H31")
  80. neww72 = Worksheets("Sheet1").Range("H32")

  81. neww73 = Worksheets("Sheet1").Range("I24")
  82. neww74 = Worksheets("Sheet1").Range("I25")
  83. neww75 = Worksheets("Sheet1").Range("I26")
  84. neww76 = Worksheets("Sheet1").Range("I27")
  85. neww77 = Worksheets("Sheet1").Range("I28")
  86. neww78 = Worksheets("Sheet1").Range("I29")
  87. neww79 = Worksheets("Sheet1").Range("I30")
  88. neww80 = Worksheets("Sheet1").Range("I31")
  89. neww81 = Worksheets("Sheet1").Range("I32")

  90. neww82 = Worksheets("Sheet1").Range("J24")
  91. neww83 = Worksheets("Sheet1").Range("J25")
  92. neww84 = Worksheets("Sheet1").Range("J26")
  93. neww85 = Worksheets("Sheet1").Range("J27")
  94. neww86 = Worksheets("Sheet1").Range("J28")
  95. neww87 = Worksheets("Sheet1").Range("J29")
  96. neww88 = Worksheets("Sheet1").Range("J30")
  97. neww89 = Worksheets("Sheet1").Range("J31")
  98. neww90 = Worksheets("Sheet1").Range("J32")

  99. inta1 = (intA * neww1) + (intB * neww9) + (intc * neww17) + (intD * neww25) + (intE * neww33)
  100. outa1 = 1 / (1 + Exp(-inta1))

  101. intb1 = (intA * neww2) + (intB * neww10) + (intc * neww18) + (intD * neww26) + (intE * neww34)
  102. outb1 = 1 / (1 + Exp(-intb1))

  103. intc1 = (intA * neww3) + (intB * neww11) + (intc * neww19) + (intD * neww27) + (intE * neww35)
  104. outc1 = 1 / (1 + Exp(-intc1))

  105. intd1 = (intA * neww4) + (intB * neww12) + (intc * neww20) + (intD * neww28) + (intE * neww36)
  106. outd1 = 1 / (1 + Exp(-intd1))

  107. inte1 = (intA * neww5) + (intB * neww13) + (intc * neww21) + (intD * neww29) + (intE * neww37)
  108. oute1 = 1 / (1 + Exp(-inte1))

  109. intf1 = (intA * neww6) + (intB * neww14) + (intc * neww22) + (intD * neww30) + (intE * neww38)
  110. outf1 = 1 / (1 + Exp(-intf1))

  111. intg1 = (intA * neww7) + (intB * neww15) + (intc * neww23) + (intD * neww31) + (intE * neww39)
  112. outg1 = 1 / (1 + Exp(-intg1))

  113. inth1 = (intA * neww8) + (intB * neww16) + (intc * neww24) + (intD * neww32) + (intE * neww40)
  114. outh1 = 1 / (1 + Exp(-inth1))

  115. Worksheets("Sheet1").Range("D1") = inta1
  116. Worksheets("Sheet1").Range("F1") = outa1
  117. Worksheets("Sheet1").Range("D2") = intb1
  118. Worksheets("Sheet1").Range("F2") = outb1
  119. Worksheets("Sheet1").Range("D3") = intc1
  120. Worksheets("Sheet1").Range("F3") = outc1
  121. Worksheets("Sheet1").Range("D4") = intd1
  122. Worksheets("Sheet1").Range("F4") = outd1
  123. Worksheets("Sheet1").Range("D5") = inte1
  124. Worksheets("Sheet1").Range("F5") = oute1
  125. Worksheets("Sheet1").Range("D6") = intf1
  126. Worksheets("Sheet1").Range("F6") = outf1
  127. Worksheets("Sheet1").Range("D7") = intg1
  128. Worksheets("Sheet1").Range("F7") = outg1
  129. Worksheets("Sheet1").Range("D8") = inth1
  130. Worksheets("Sheet1").Range("F8") = outh1

  131. inti1 = (outa1 * neww41) + (outb1 * neww46) + (outc1 * neww51) + (outd1 * neww56) + (oute1 * neww61) + (outf1 * neww66) + (outg1 * neww71) + (outh1 * neww76)
  132. outi1 = 1 / (1 + Exp(-inti1))

  133. intj1 = (outa1 * neww42) + (outb1 * neww47) + (outc1 * neww52) + (outd1 * neww57) + (oute1 * neww62) + (outf1 * neww67) + (outg1 * neww72) + (outh1 * neww77)
  134. outj1 = 1 / (1 + Exp(-intj1))

  135. intk1 = (outa1 * neww43) + (outb1 * neww48) + (outc1 * neww53) + (outd1 * neww58) + (oute1 * neww63) + (outf1 * neww68) + (outg1 * neww73) + (outh1 * neww78)
  136. outk1 = 1 / (1 + Exp(-intk1))

  137. intl1 = (outa1 * neww44) + (outb1 * neww49) + (outc1 * neww54) + (outd1 * neww59) + (oute1 * neww64) + (outf1 * neww69) + (outg1 * neww74) + (outh1 * neww79)
  138. outl1 = 1 / (1 + Exp(-intl1))

  139. intm1 = (outa1 * neww45) + (outb1 * neww50) + (outc1 * neww55) + (outd1 * neww60) + (oute1 * neww65) + (outf1 * neww70) + (outg1 * neww75) + (outh1 * neww80)
  140. outm1 = 1 / (1 + Exp(-intm1))

  141. Worksheets("Sheet1").Range("H1") = inti1
  142. Worksheets("Sheet1").Range("J1") = outi1
  143. Worksheets("Sheet1").Range("H2") = intj1
  144. Worksheets("Sheet1").Range("J2") = outj1
  145. Worksheets("Sheet1").Range("H3") = intk1
  146. Worksheets("Sheet1").Range("J3") = outk1
  147. Worksheets("Sheet1").Range("H4") = intl1
  148. Worksheets("Sheet1").Range("J4") = outl1
  149. Worksheets("Sheet1").Range("H5") = intm1
  150. Worksheets("Sheet1").Range("J5") = outm1

  151. intn1 = (outi1 * neww81) + (outj1 * neww83) + (outk1 * neww85) + (outl1 * neww87) + (outm1 * neww89)
  152. outn1 = 1 / (1 + Exp(-intn1))

  153. into1 = (outi1 * neww82) + (outj1 * neww84) + (outk1 * neww86) + (outl1 * neww88) + (outm1 * neww90)
  154. outo1 = 1 / (1 + Exp(-into1))

  155. Worksheets("Sheet1").Range("L1") = intn1
  156. Worksheets("Sheet1").Range("N1") = outn1
  157. Worksheets("Sheet1").Range("L2") = into1
  158. Worksheets("Sheet1").Range("N2") = outo1

  159. errn = outn1 * (1 - outn1) * (tarn - outn1)
  160. erro = outo1 * (1 - outo1) * (taro - outo1)

  161. Worksheets("Sheet1").Range("N5") = errn
  162. Worksheets("Sheet1").Range("N6") = erro

  163. neww81 = neww81 + (errn * outi1)
  164. neww82 = neww82 + (erro * outi1)
  165. neww83 = neww83 + (errn * outj1)
  166. neww84 = neww84 + (erro * outj1)
  167. neww85 = neww85 + (errn * outk1)
  168. neww86 = neww86 + (erro * outk1)
  169. neww87 = neww87 + (errn * outl1)
  170. neww88 = neww88 + (erro * outl1)
  171. neww89 = neww89 + (errn * outm1)
  172. neww90 = neww90 + (erro * outm1)

  173. erri = outi1 * (1 - outi1) * (errn * neww81 + erro * neww82)
  174. errj = outj1 * (1 - outj1) * (errn * neww83 + erro * neww84)
  175. errk = outk1 * (1 - outk1) * (errn * neww85 + erro * neww86)
  176. errl = outl1 * (1 - outl1) * (errn * neww87 + erro * neww88)
  177. errm = outm1 * (1 - outm1) * (errn * neww89 + erro * neww90)

  178. Worksheets("Sheet1").Range("P5") = erri
  179. Worksheets("Sheet1").Range("P6") = errj
  180. Worksheets("Sheet1").Range("P7") = errk
  181. Worksheets("Sheet1").Range("P8") = errl
  182. Worksheets("Sheet1").Range("P9") = errm

  183. neww41 = neww41 + (erri * outa1)
  184. neww42 = neww42 + (errj * outa1)
  185. neww43 = neww43 + (errk * outa1)
  186. neww44 = neww44 + (errl * outa1)
  187. neww45 = neww45 + (errm * outa1)
  188. neww46 = neww46 + (erri * outb1)
  189. neww47 = neww47 + (errj * outb1)
  190. neww48 = neww48 + (errk * outb1)
  191. neww49 = neww49 + (errl * outb1)
複製代碼

TOP

回復 2# stillfish00


    啊啊,是應該那樣子做才對嗎?
當初因為想到會透過前一個隱藏層的「誤差值」,重新運算 新的W產生。
所以沒有考慮到把陣列拆開運算的過程。

那我應該要怎麼做才正確呢?

是不是應該把 迴圈拆成 三個部分來寫 這樣比較妥當?

我想解決 重複 讀取 及 輸入 在儲存格上的步驟,因為會造成運算上的緩慢...
先 謝謝大大 指導

TOP

回復 1# qwertyuio111
為什麼你的W要設計成9X10的陣列
而不是 5x8、8x5、5x2,三個陣列
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題