#tensorflow #machine-learning #neural-network
Вопрос:
Я пытаюсь создать эту пользовательскую ЭНН с помощью tensorflow. Вот изображение сети игрушек и код.
import tensorflow as tf
import numpy as np
in = np.array([1, 2, 3, 4], , dtype="float32")
y_true = np.array([10, 11], , dtype="float32")
# w is vector of weights
# y_pred = np.array([in[0]*w[0] in[1]*w[0]], [in[2]*w[1] in[3]*w[1]] )
# y_pred1 = 1 / (1 tf.math.exp(-y_pred)) # sigmoid activation function
def loss_fun(y_true, y_pred1):
loss1 = tf.reduce_sum(tf.pow(y_pred1 - y_true, 2))
# model.compile(loss=loss_fun, optimizer='adam', metrics=['accuracy'])
Вывод этой сети идет к другой ЭНН справа, и я знаю это, но не знаю, как я могу создавать соединения, обновлять w
y_pred
и компилировать модель. Какая-нибудь помощь?
Ответ №1:
Что-то вроде этого должно сработать
import tensorflow as tf
import numpy as np
def y_pred(x, w):
return [x[0]*w[0] x[1]*w[0], x[2]*w[1] x[3]*w[1]]
def loss_fun(y_true, y_pred):
return tf.reduce_sum(tf.pow(y_pred - y_true, 2))
x = np.array([1, 2, 3, 4], dtype="float32")
y_true = np.array([10, 11], dtype="float32")
w = tf.Variable(initial_value=np.random.normal(size=(2)), name='weights', dtype=tf.float32)
xt = tf.convert_to_tensor(x)
yt = tf.convert_to_tensor(y_true)
sgd_opt = tf.optimizers.SGD()
training_steps = 100
display_steps = 10
for step in range(training_steps):
with tf.GradientTape() as tape:
tape.watch(w)
yp = y_pred(xt, w)
loss = loss_fun(yt, yp)
dl_dw = tape.gradient(loss, w)
sgd_opt.apply_gradients(zip([dl_dw], [w]))
if step % display_steps == 0:
print(loss, w)
Комментарии:
1. Спасибо. Мне нужно написать отдельную функцию активации или я могу использовать встроенные функции?
2. @ewr3243 Вы можете использовать встроенные активации, просто измените функцию y_pred (или запустите «yp» через активацию). Вы, вероятно, захотите изменить свою потерю на кросс-энтропию, а также y_true будет выглядеть по-другому. Вам нужно быть немного осторожным с градиентной лентой, если вы начнете что-то менять, потому что все должно быть тензорами (не например, np.ndarrays).