Stack Overflow на русском Asked by SatOrY on December 22, 2021
Есть код простенькой нейронной сети (кусок)
import numpy as np
def net_build():
def linear(_in, _out): # network linear layer
w = np.random.randn(_in * _out).astype(np.float32) * .1
b = np.random.randn(_out).astype(np.float32) * .1
return (_in, _out), np.concatenate((w, b))
s0, p0 = linear(4, 10)
s1, p1 = linear(10, 10)
s2, p2 = linear(10, 2)
return [s0, s1, s2], np.concatenate((p0, p1, p2))
shapes, params = net_build()
Уже неделю пытаюсь поменять функцию активации с линейной, тут
s1, p1 = linear(10, 10)**
на Sigmoid / ReLu и ничего не выходит.
З.Ы. сам ни капли не программист, так что буду признателен любой помощи.
Попробуйте написать функцию активации, которая возвращает сам элемент без изменений
Попробовал, вот что получилось и оно работает
import numpy as np
def net_build():
def linear(_in, _out): # network linear layer
w = np.random.randn(_in * _out).astype(np.float32) * .1
b = np.random.randn(_out).astype(np.float32) * .1
return (_in, _out), np.concatenate((w, b))
def sigmoid(_in, _out): # network sigmoid layer
def sgm(x):
return x #1 / (1 + np.exp(-x))
w = np.random.randn(_in * _out).astype(np.float32) * .1
b = np.random.randn(sgm(_out)).astype(np.float32) * .1
return (_in, _out), np.concatenate((w, b))
s0, p0 = linear(4, 10)
s1, p1 = sigmoid(10, 10)
s2, p2 = linear(10, 2)
return [s0, s1, s2], np.concatenate((p0, p1, p2))
shapes, params = net_build()
print(shapes, params)
а потом заменить её на сигмоид короче
Заменил и теперь оно выдает ошибку:
import numpy as np
def net_build():
def linear(_in, _out): # network linear layer
w = np.random.randn(_in * _out).astype(np.float32) * .1
b = np.random.randn(_out).astype(np.float32) * .1
return (_in, _out), np.concatenate((w, b))
def sigmoid(_in, _out): # network sigmoid layer
def sgm(x):
return 1 / (1 + np.exp(-x))
w = np.random.randn(_in * _out).astype(np.float32) * .1
b = np.random.randn(sgm(_out)).astype(np.float32) * .1
return (_in, _out), np.concatenate((w, b))
s0, p0 = linear(4, 10)
s1, p1 = sigmoid(10, 10)
s2, p2 = linear(10, 2)
return [s0, s1, s2], np.concatenate((p0, p1, p2))
shapes, params = net_build()
print(shapes, params)
Сама ошибка:
Traceback (most recent call last):
File "E:/_NN/tests12_Sigm/data/b.py", line 22, in <module>
shapes, params = net_build()
File "E:/_NN/tests12_Sigm/data/b.py", line 18, in net_build
s1, p1 = sigmoid(10, 10)
File "E:/_NN/tests12_Sigm/data/b.py", line 13, in sigmoid
b = np.random.randn(sgm(_out)).astype(np.float32) * .1
File "mtrand.pyx", line 1232, in numpy.random.mtrand.RandomState.randn
File "mtrand.pyx", line 1389, in numpy.random.mtrand.RandomState.standard_normal
File "_common.pyx", line 577, in numpy.random._common.cont
TypeError: 'numpy.float64' object cannot be interpreted as an integer
У вас это неправильно
b = np.random.randn(sgm(_out)).astype(np.float32) * .1
Видимо нужно
b = np.random.randn(_out).astype(np.float32) * .1
sgm дает float,а np.random.randn нужно int(целое).
Answered by Константин on December 22, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP