Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Сети
Войти
Регистрация
Восстановить пароль
 
Smedase
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 3
1

Проблема с большими листами

18.05.2019, 11:03. Просмотров 144. Ответов 3
Метки нет (Все метки)

Пытался написать программу с использованием нейронных сетей и машинного обучения(эволюции). Однако возникла небольшая проблема с листами, которые хранят все веса нейронной сети, а именно, при изменении одного элемента одного листа, менялся элемент другого. Убедится в этом мне помогла вот эта часть кода:
Python
1
2
3
4
    if X == Y:
        print(X[0][0][0])
        Y[0][0][0] += 0.5
        print(X[0][0][0])
Часть вывода в консоль:
Кликните здесь для просмотра всего текста

1148.0
1148.5
1148.5
1149.0
1149.0
1149.5
1149.5
1150.0

Вот весь код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import random
 
Cl = []
Mind = open("C://Mind.txt")
NCl = int(Mind.read(1))
for line in Mind:
    Cl.append(line)
Cl.pop(0)
NLayer = int(input("Количесво скрытых слоёв:"))
NNeuron = int(input("Количество нейронов в слое:"))
Wl1 = []
Wl2 = []
WLink = []
WLink. append([[0], [0], [0]])
Sh1 = []
Shift = []
Shift. append([0, 0, 0])
r = []
Res = []
for o in range(3):
    r.append(0)
Res.append(r)
r = []
SizeLayer = [3]
for n in range(NLayer):
    SizeLayer.append(NNeuron)
SizeLayer.append(NCl)
 
def Answer(Array):
    n = 0
    for res in range(NCl):
        if Array[res] > Array[n]:
            n = res
    return(n)
 
def CalcRes(WCom, Bool):
    for layer in range(NLayer + 1):
        for Neuron in range(SizeLayer[layer + 1]):
            for nw in range(SizeLayer[layer]):
                Res[layer + 1][Neuron] = WCom[layer + 1][Neuron][nw] * Res[layer][nw]
            Res[layer + 1][Neuron] = 1 / (1 + 2 ** (Res[layer + 1][Neuron] + Shift[layer + 1][Neuron]))
    if Bool == False:
        return(Answer(Res[-1]))
    if Bool == True:
        return(Res[-1])
 
def Mutation(Y):
    for k in range((NLayer * NNeuron ** 2 * 15) // 100):
        l = round((random.random() * NLayer + 1) // 1)
        n = round((random.random() * SizeLayer[l + 1]) // 1)
        w = round((random.random() * SizeLayer[l]) // 1)
        Y[l + 1][n][w] += random.random() - 0.5
    return Y
 
def Trainig(X, Y, TA):
    Rating = [0, 0]
    if X == Y:
        print(X[0][0][0])
        Y[0][0][0] += 0.5
        print(X[0][0][0])
    for network in range(2):
        if network == 0:
            Results = CalcRes(X, True)
        if network == 1:
            Results == CalcRes(Y, True)
        Rate = 0
        for a in range(NCl):
            if a != TA:
                Rate -= Results[a]
            else:
                Rate += Results[a]
        Rating[network] = Rate
    if Rating[0] < Rating[1]:
        return Y
    else:
        return X
 
for w1 in range(NLayer + 1):
    for w2 in range(SizeLayer[w1 + 1]):
        for w3 in range(SizeLayer[w1]):
            Wl1.append(random.random())
            if random.random() < 0.5:
                Wl1[-1] *= -1
        Wl2.append(Wl1)
        Wl1 = []
        Sh1.append(random.random())
        r.append(0)
        if random.random() < 0.5:
            Sh1[-1] *= -1
    WLink.append(Wl2)
    Wl2 = []
    Shift.append(Sh1)
    Sh1 = []
    Res.append(r)
    r = []
while 0 == 0:
    Move = input("Произвести обучение?(0/1)")
    if Move == "0":
        Res[0][0] = (int(input("Красный:")))
        Res[0][1] = (int(input("Зелёный:")))
        Res[0][2] = (int(input("Синий:")))
        print(Cl[CalcRes(WLink, False)])
    elif Move == "1":
        Res[0][0] = (int(input("Красный:")))
        Res[0][1] = (int(input("Зелёный:")))
        Res[0][2] = (int(input("Синий:")))
        print(Cl)
        TrueA = int(input("Введите правильный ответ:"))
        TrueNet = False
        while TrueNet == False:
            WLink = Trainig(WLink, Mutation(WLink), TrueA)
            if CalcRes(WLink, False) == TrueA:
                TrueNet = True
        print("Готово")
P.S.Да, код можно оптимизировать, но питон я начал изучать недавно, поэтому пока программа с костылями.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2019, 11:03
Ответы с готовыми решениями:

Проблема с большими массивами
Добрый день. Есть проблема с большими массивами, помогите пожалуйста. Камень stm32f051k8t6 8кб...

проблема с большими числами
Пишу такой код: int q = (int)java.lang.Math.pow(21, 13); System.out.println(&quot;q: &quot; + q);...

Проблема работы с большими объектами LOB
Здравствуйте. Проблема рабты с большими объектами LOB возникла при использовании таблиц dbf: 1. В...

Работа с листами
Доброе время суток! подскажите как сделать так чтоб из формы VBA сохранялось на нужный лист(не...

Проблемы с Листами и ЛинкедЛистами
Посоветуйте, что почитать, чтобы разобратся в этой теме, спасибо

3
Smedase
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 3
18.05.2019, 11:56  [ТС] 2
Вот файл Mind.txt, если вдруг понадобится для теста.
http://www.cyberforum.ru/attachment....1&d=1558169772
0
Вложения
Тип файла: txt Mind.txt (61 байт, 1 просмотров)
dondublon
2292 / 1219 / 252
Регистрация: 17.03.2012
Сообщений: 7,192
Записей в блоге: 5
Сегодня, 10:25 3
Smedase, список - это объект.
В списке, скажем так, 1-го уровня, хранится ссылка на список второго. То есть это тот же самый список, а не его копия.
Чтобы этого не было - список можно копировать, но для ваших целей, скорее, нужно вообще заюзать numpy.
1
Smedase
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 3
Сегодня, 15:12  [ТС] 4
Спасибо, попробую использовать NumPy.
0
Сегодня, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Сегодня, 15:12

Работа с листами в Excel
В листе есть 3 колонки. Допустим R3C1,R3C2,R3C3 Можно ли удалить их как-нибудь удалить 1 строчкой...

работа с защищенными листами
Добрый день. Пытаюсь сделать защиту на листы чтоб данные могли вводиться только через форму ввода....

Разбор программы с листами
Console.Write(&quot;ввод длины k:&quot;); int k = Convert.ToInt32(Console.ReadLine()); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru