Я пытаюсь создать нейронную сеть (MLP) с входным слоем с одним узлом, одним скрытым слоем с двумя узлами и выходным слоем с одним узлом. поэтому между входным и скрытым слоями будет два веса и смещения, а между скрытым и выходным слоями - два веса и смещения. X является вводом, а Y является целью. Эта нейронная сеть должна принимать одно действительное число в качестве входного и выходного одного действительного числа. (Y_pred)
Как вы можете видеть, мой подход довольно наивен, так как мне реализовать это с тензорами, чтобы, если я добавлю больше скрытые узлы мне не придется писать столько кода. Кроме того, что я могу сделать, чтобы он взял вектор X в качестве входного и выходного вектора y_pred в качестве своих прогнозируемых значений, а затем скорректировал вес и смещения (Это все равно должно дать один выход для одного значения ввода, я думал просто положить oop). Спасибо.
'' '
def neural_network(X, Y):
w11 = 4 # some random value
w12 = 6
w21 = 6
w22 = 1
b11 = 4 # some random value
b12 = 6
b21 = 6
b22 = 1
for x in X:
with tf.GradientTape() as t:
t.watch(w11)
t.watch(w12)
t.watch(b11)
t.watch(b12)
t.watch(w21)
t.watch(w22)
t.watch(b21)
t.watch(b22)
hidden_1 = x * w11 + b11
hidden_2 = x * w12 + b12
a_1 = tf.math.tanh(hidden_1)
a_2 = tf.math.tanh(hidden_2)
output = (a_1 * w21 + b21) + (a_2 + w22 + b22)
nll = -tf.compat.v1.losses.log_loss(Y, output)
w11 = w11 - t.gradient(nll, w11)
w12 = w12 - t.gradient(nll, w12)
# same with rest of the weights and biases with every value of x and then return weights and biases
' ''