import dynet as dy
import random
HIDDEN_SIZE = 20
NUM_EPOCHS = 20
model = dy.Model()
W_xh_p = model.add_parameters((HIDDEN_SIZE, 2))
b_h_p = model.add_parameters(HIDDEN_SIZE)
W_hy_p = model.add_parameters((1, HIDDEN_SIZE))
b_y_p = model.add_parameters(1)
trainer = dy.SimpleSGDTrainer(model)
data = [([1,1],1), ([-1,1],-1), ([1,-1],-1), ([-1,-1],1)]
def (x):
dy.renew_cg()
w_xh = dy.parameter(W_xh_p)
b_h = dy.parameter(b_h_p)
W_hy = dy.parameter(W_hy_p)
b_y = dy.parameter(b_y_p)
x_val = dy.inputVector(x)
h_val = dy.tanh(w_xh * x_val + b_h)
y_val = W_hy * h_val + b_y
return y_val
for epoch in range(NUM_EPOCHS):
epoch_loss = 0
random.shuffle(data)
for x, ystar in data:
y = calc_function(x)
loss = dy.squared_distance(y, dy.scalarInput(ystar))
epoch_loss += loss.value()
loss.backward()
trainer.update()
print("Epoch %d: loss=%f" % (epoch, epoch_loss))
for x, ystar in data:
y = calc_function(x)
print("%r -> %f" % (x, y.value()))
近期评论