Перейти к содержимому
RU
Играть

Форум

Флуда требуют наши сердца!


3BEPO3ABP

Рекомендованные сообщения

Двойные стандарты.

 

Но раньше нас покикают (за обсуждение тарарам и трампапам ), чем ошалевшего в атаке модира.

  • Нравится 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И снова готово. Генератор нейронных сетей. Количество нейронов в слоях задаётся пользователем. Количество скрытых слоёв тоже.

Единственное, пока возможно создать не более 10 нейронов в одном слое.

Скрытый текст

import math
import random

"""	Нейронная сеть.
	Количество нейронов в слое и количество самих слоёв задаётся пользователем.
	Функцией активации является сигмоида.
"""

def startLearning(G, V, NN, numAfterComma, learningRate, testCases):
	""" Главная функция обучения сети,
			из-под которой вызываются все остальные.
	"""
	clearNeuronValues(V)		#Очищаем все values в нейронах от предыдущего прохода.
	for x,y,z,expected in testCases:	#Считываем кортеж из 3-х входных значений
		portion = (x,y,z, expected)		#и одного правильного ответа (x,y,z, e).
		i = 0
		for v in V:		#Ищем сенсорные нейроны и записываем в них данные.
			if v[0:1] == '0':
				V[v]['value'] = portion[i]
				i += 1
		forwardRun(G, V, NN, numAfterComma)
		backwardRun(G, V, NN, numAfterComma, expected, learningRate)


def forwardRun(G, V, NN, numAfterComma):
	""" Прямой проход.
			Проходит все слои нейронов в прямом направлении
			и активирует их последовательно значениями,
			полученными от стартовых нейронов, помноженными
			на вес связей соответствующих нейронов, и проведёнными
			через функцию активации (сигмоид).

			Кортеж NN содержит наглядное представление
			слоёв нейронов. Индекс кортежа равен № слоя нейронов,
			значение индекса кортежа равно кол-ву нейронов
			в соответствующем слое.

			for vert in G:			#Имена вершин начинаются с цифры, равной № слоя.
			if vert[0:1] == str(i)	#Если она совпадает с индексом кортежа (т.е. с № слоя),
									#значит мы рассматриваем все нейроны данного слоя.
	"""
	for i in range(len(NN)-1):	#От O до предпоследнего слоя включительно.
		for vert in G:
			if vert[0:1] == str(i+1):	#Просматриваем нейроны нижнего слоя из верхнего:
				for v in G[vert]:		#со слоя I рассматриваем слой O, со слоя II - слой I.
					if v[0:1] == str(i):
						prevVelue = V[v]['value']		#Считываем value нижнего нейрона
						prevWeight = G[vert][v]			#и вес связи с текущим.
						V[vert]['value'] += prevVelue*prevWeight	#Суммируем в value верхнего нейрона.
				V[vert]['value'] = sigmoid(V[vert]['value'])		#По окончании цикла суммирования
				V[vert]['value'] = reduceSimbols(V[vert]['value'],	#активируем в сигмоиде и отбрасываем
													numAfterComma)	#лишние знаки после запятой.


def backwardRun(G, V, NN, numAfterComma, expected, learningRate):
	""" Обратный проход, используя
		Метод обратного распространения ошибок.

		Проходим все слои нейронов в обратном направлении,
		считаем ошибку выходного и всех нижележащих нейронов.
		Через ошибку вычисляем поправку на вес связи нейронов.

		Цикл от последнего слоя к O, т.е. все слои в обратном порядке.
		Рассматриваем 3 варианта бока (if -- elif -- elif):
		- если это самый верхний слой;
		- если это самый нижний слой;
		- если это скрытые слои.
	"""
	for i in range(len(NN)-1, -1, -1):	#От выходного слоя к O.
		for vert in G:
			if vert[0:1] == str(i) and i == len(NN)-1:	#Если это самый верхний слой.
				currentValue = V[vert]['value']
				currentSigma = firstSigma(expected, currentValue)
				V[vert]['sigma'] = currentSigma

			elif vert[0:1] == str(i) and i == 0:	#Если это самый нижний слой.
				currentValue = V[vert]['value']
				for v in G[vert]:
					if v[0:1] == str(i+1):	#Меняем веса из нижнего слоя в верхнем.
						weightOutOld, parentSigma = getParentInfo(G, vert, v, V)
						delta = calcDelta(currentValue, parentSigma, learningRate)
						weightOutNew = calcNewWeight(delta, weightOutOld)
						weightOutNew = reduceSimbols(weightOutNew, numAfterComma)
						writeNewWeight(G, vert, v, weightOutNew)

			elif vert[0:1] == str(i):	#Если это скрытый слой.
				currentValue = V[vert]['value']
				preSigma = 0
				for v in G[vert]:
					if v[0:1] == str(i+1):
						weightOutOld, parentSigma = getParentInfo(G, vert, v, V)
						delta = calcDelta(currentValue, parentSigma, learningRate)
						weightOutNew = calcNewWeight(delta, weightOutOld)
						weightOutNew = reduceSimbols(weightOutNew, numAfterComma)
						writeNewWeight(G, vert, v, weightOutNew)
						preSigma += weightOutOld*parentSigma
				currentSigma = preSigma*derivative(currentValue)
				V[vert]['sigma'] = currentSigma



def clearNeuronValues(V):	#Обнуляем все значения "value" в нейроне.
	for v in V:
		V[v]['value'] = 0


def writeNewWeight(G, vert, v,	#Записывает новый вес в граф.
					weightOutNew):
	G[vert][v] = weightOutNew
	G[v][vert] = weightOutNew


def getParentInfo(G, vert, v, V):	#Считывает ошибку и вес связи из
	weightOutOld = G[vert][v]		#нейрона и соединения пары нейронов.
	parentSigma = V[v]['sigma']
	return (weightOutOld, parentSigma)


def calcDelta(currentValue,		#Вычисление дельты
				parentSigma,	#веса связи.
				learningRate):
	delta = currentValue*parentSigma*learningRate
	return delta


def calcNewWeight(delta, weightOutOld):	#Вычисление нового веса связи
	weightOutNew = weightOutOld+delta 	#по старому и дельте.
	return weightOutNew


def firstSigma(expected,	#Вычисление ошибки самого верхнего нейрона.
				currentValue):
	sigma = (expected-currentValue)*derivative(currentValue)
	return sigma


def calcSigma(parentSigma,		#Вычисление ошибки нейронов
				weightOutOld,	#скрытого слоя.
				currentValue):
	sigma = parentSigma*weightOutOld*derivative(currentValue)
	return sigma


def derivative(value):		#Производная функции активации
	return value*(1-value)

def sigmoid(x):		#Функция активации
	return 1/(1+math.e**(-x))

def reduceSimbols(x, y):	#Оставляет Y знаков после запятой числа X.
	return int(x*10**y)/10**y


def createGraph(G, NN, numAfterComma):
	""" Создаёт структуру нейронной сети в виде графа,
			представленного словарём из словарей со значениями
			ключей внутреннего словаря в виде весов нейронных связей.
	"""
	for i in range(len(NN)-1): 	#Для каждого слоя, кроме последнего.
		nomberNeuronsInLayerLeft = NN[i]		#Считаем кол-во нейронов
		nomberNeuronsInLayerRight = NN[i+1]		#в слое.
		for x in range(nomberNeuronsInLayerLeft):
			nameVertexLeft = str(i)+str(x)				#Создаём имена нейронов каждого
			for y in range(nomberNeuronsInLayerRight):	#слоя так, чтобы имя нулевого слоя
				nameVertexRight = str(i+1)+str(y)		#начиналось с O, второго - с 1 и т.д.
				stdWeight = random.random()				#Рандомный вес от 0 до 1.
				stdWeight = reduceSimbols(stdWeight,	#Отбрасываем лишние
										numAfterComma)	#знаки после запятой.
				for v1,v2 in ((nameVertexLeft,nameVertexRight),
								(nameVertexRight,nameVertexLeft)):
					if v1 not in G:
						G[v1] = {v2 : stdWeight}
					else:
						G[v1][v2] = stdWeight
	print()
	print('Так выглядят в начале рандомные веса связей \
между нейронами сети')
	for v in G:
		print(v, G[v])
	print()


def main():
	NN = input('Введи через пробел число нейронов послойно \
	слева направо, начиная с сенсорных. Например, 3 2 1:').split()
	NN = [int(x) for x in NN]	#Было ['3','2','1']   стало [3,2,1]
	valuesOfNeuron = ('value', 'sigma')
	testCases = ((0,0,0,0), (0,0,1,1),	(0,1,0,0), (0,1,1,0),
				(1,0,0,1), (1,0,1,1), (1,1,0,0), (1,1,1,1))

	generation = 10000
	learningRate = 0.05
	numAfterComma = 10
	G = {}
	createGraph(G, NN, numAfterComma)
	V = {keys:{values:0 for values in valuesOfNeuron} for keys in G}

	while generation != 0:
		startLearning(G, V, NN, numAfterComma, learningRate, testCases)
		generation -= 1


if __name__ == '__main__':
	main()
    

 

Код самодокументирующийся, надеюсь, будет понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

аж на ностальгию пробило . ронял скупую мужскую слезу , вспоминая доРБшных читаков:) 

Скрытый текст

135403da68c736ac8deed2ee86815747.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

17 часов назад, P_woland сказал:

Он уже в 15 нуль-нуль выступал.

)))юмор зачтен

судя по всему..)))

"за работу , товарищи"

пс если шо я-там не я:D

 

Изменено пользователем RADFIL

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Под спойлер хоть добавляйте ваши огромные сообщения, а то листать не перелистать..

Что у нас на повестке дня?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все таки уговорили идти с понедельника во внеочередной, но оплачиваемый отпуск. Эхх, порыбачу, пока еще реки стоят)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, KOT_B_MELLJKE сказал:
1 час назад, K.0.H.C.T.A.H.T.U.H сказал:

Что у нас на повестке дня?

Короновирус. Изменится ли мир после эпидемии или будет жить так же, как и до неё? Станет ли это уроком для всех, чтобы изменить свой способ жизни?

Как коронавирус влияет на секретные показатели? Вырастет ли онлайн на период карантина и насколько? Какие меры приняло руководство Альтернативы для борьбы с инфекцией? Кто самое слабое звено?

 

39 минут назад, KOT_B_MELLJKE сказал:

Издать указ и делов то)

Это Собянину нужно лететь на кардон к Зверу.

Скрытый текст
1 час назад, Guard_of_world сказал:

vaB0KFY.png

 

Теперь вам принадлежит: что?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 минуту назад, KOT_B_MELLJKE сказал:

Собянин?)

Мэр града стольного. Он ведь запретил жителям старше 65 лет выходить из дома.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

23 часа назад, KOT_B_MELLJKE сказал:

Ничё тут не работает и полно заражённых!

наверняка хотел сказать "полно поехавших".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только что, P_woland сказал:

А чтобы рыбе запретить, нужно делать выездное заседание мэрии.

И штрафы башенные впаять - за поклёвку. Ща московские друзья накидал видосов - колонны Росгвардии въезжают в Первопрестольную

2 минуты назад, KOT_B_MELLJKE сказал:

 

Ясно, это спец по указам у вас)

И спец и жрец и на тротуарах игрец.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

13 минуты назад, KOT_B_MELLJKE сказал:

Проштрафилась рыба - пусть платит икрой или чешуёй!)

Вообще ждём Зверыча с рыбалки: фото и корешки квитанций.

13 минуты назад, KOT_B_MELLJKE сказал:

 

Да это полный ...ец!

А он, как известно приходит незаметно! Или просто - Пермский ездец.

Изменено пользователем MOLDOBAH_B_TAHKE

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

22 минуты назад, KOT_B_MELLJKE сказал:

Да это полный ...ец!

 

7 минут назад, KOT_B_MELLJKE сказал:
11 минуту назад, MOLDOBAH_B_TAHKE сказал:

А он, как известно приходит незаметно!

Невидимка)

Встречается и ...ец... Не всегда узнаваем сразу...

 

 

 

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

14 минуты назад, MOLDOBAH_B_TAHKE сказал:

Вообще ждём Зверыча с рыбалки: фото и корешки квитанций.

 

10 минут назад, KOT_B_MELLJKE сказал:

Это не раньше понедельника будет)

Точнее воскресения, или может вечер субботы, смотря как в субботу клевать будет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 минуту назад, KOT_B_MELLJKE сказал:

Пробуй на туалетную бумагу! Может и среды рыб на неё ажиотаж) 

Вряд ли. Они как мусульмане.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

18 минут назад, KOT_B_MELLJKE сказал:

Пробуй на туалетную бумагу! Может и среды рыб на неё ажиотаж) 

На гречку точно, лучше конечно если ее хотя бы в термосе запарить)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

23 минуты назад, P_woland сказал:

Вряд ли. Они как мусульмане.

О_О не пользуются туалетной бумагой?

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 часа назад, Guard_of_world сказал:

А вчера какой-то там представитель заливал, мол всё нормуль, для него в реанимации полежать- это как зубы почистить...

 

 

Так у него же коронавирус  и двусторонняя пневмония...в тяжелом состоянии,так пишут..Кстати,выяснилось для чего бумага то была нужна...

Скрытый текст

8ab6b4d226ef36de2428ad9915bdb160.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только что, KOT_B_MELLJKE сказал:

Ты даже не представляешь, что ты сейчас сделала! Теперь потерян смысл жизни дальше, зная для чего нужна бумага)

У тебя смысл жизни был в бумаге?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

9 минут назад, KOT_B_MELLJKE сказал:

Теперь потерян смысл жизни дальше

Может быть, минутка доброго котоспама поможет тебе найти смысл жизни?

Скрытый текст

b61c83dfc702661fb714bb4e3e76d3f9.jpg

257b73a790182465a8c9c8dfe37671cc.jpg

96dfee3e01c102dc32a992eca6d63db1.jpg

c477f4af22706b531e227baa0d4a30d5.jpg

587216fd585b587f45b75d658ae263f4.jpgbcf29dee52bf065503f39e4abc9af2ca.jpg

3c8e1902edc96fa8ef051dcde12359ca.jpg

5e18ec40538675290781f025a8f0b8ba.jpg

43063a99f71b8e2c1c6700d663b03431.jpg

0b58db68f36132590ed18dc40d160eda.jpg

 

Изменено пользователем P_woland
  • Нравится 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, KOT_B_MELLJKE сказал:

Пробуй на туалетную бумагу! Может и среды рыб на неё ажиотаж) 

Не профи на гречку ловят инфа ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 22.03.2020 в 13:52, G_r_e_e_n сказал:

Вот ради этого и придумана власть, чтоб сразу брать за жопу таких вот ушлых чувачков.

 

Если понимать твою фразу дословно, то совершенно нельзя с этим согласиться.

Какой-то идеализм в превосходной степени. Собственно у истоков возникновения

власти какое-то там стремление борьбы со спекуляцией даже и близко не стояло.

В крайнем случае некий древний владыка мог щемить барыжек с конкретной

целью - заделаться главным барыганом самому, а не из чувства справедливости

и прочей высокодуховной ерунды.

 

То есть, понятна твоя мысль, типа нармальна гуманная власть должна всеми

доступными ей способами бороться и жёстко пресекать попытки наживаться

на вещах, которые критически завязаны на масштабной безопасности человеков,

чьи интересы она кагбе представляет (хотя бы декларативно).

 

Однако слово "придумана" в данном контексте совсем не подходит.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×
×
  • Создать...