|
|
|
@ -200,8 +200,6 @@ class PtbModel(fluid.dygraph.Layer):
|
|
|
|
|
rnn_out, shape=[-1, self.num_steps, self.hidden_size])
|
|
|
|
|
projection = fluid.layers.matmul(rnn_out, self.softmax_weight)
|
|
|
|
|
projection = fluid.layers.elementwise_add(projection, self.softmax_bias)
|
|
|
|
|
projection = fluid.layers.reshape(
|
|
|
|
|
projection, shape=[-1, self.vocab_size])
|
|
|
|
|
projection = fluid.layers.reshape(
|
|
|
|
|
projection, shape=[-1, self.vocab_size])
|
|
|
|
|
loss = fluid.layers.softmax_with_cross_entropy(
|
|
|
|
@ -223,6 +221,7 @@ class TestDygraphPtbRnn(unittest.TestCase):
|
|
|
|
|
num_steps = 3
|
|
|
|
|
init_scale = 0.1
|
|
|
|
|
batch_size = 4
|
|
|
|
|
batch_num = 200
|
|
|
|
|
|
|
|
|
|
with fluid.dygraph.guard():
|
|
|
|
|
fluid.default_startup_program().random_seed = seed
|
|
|
|
@ -242,7 +241,6 @@ class TestDygraphPtbRnn(unittest.TestCase):
|
|
|
|
|
dy_loss = None
|
|
|
|
|
last_hidden = None
|
|
|
|
|
last_cell = None
|
|
|
|
|
batch_num = 200
|
|
|
|
|
|
|
|
|
|
for i in range(batch_num):
|
|
|
|
|
x_data = np.arange(12).reshape(4, 3).astype('int64')
|
|
|
|
@ -282,7 +280,8 @@ class TestDygraphPtbRnn(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
exe = fluid.Executor(fluid.CPUPlace())
|
|
|
|
|
sgd = SGDOptimizer(learning_rate=1e-3)
|
|
|
|
|
x = fluid.layers.data(name="x", shape=[-1, 3, 1], dtype='int64')
|
|
|
|
|
x = fluid.layers.data(
|
|
|
|
|
name="x", shape=[-1, num_steps, 1], dtype='int64')
|
|
|
|
|
y = fluid.layers.data(name="y", shape=[-1, 1], dtype='float32')
|
|
|
|
|
init_hidden = fluid.layers.data(
|
|
|
|
|
name="init_hidden", shape=[1], dtype='float32')
|
|
|
|
@ -332,7 +331,6 @@ class TestDygraphPtbRnn(unittest.TestCase):
|
|
|
|
|
for k in range(3, len(out)):
|
|
|
|
|
static_param_updated[static_param_name_list[k -
|
|
|
|
|
3]] = out[k]
|
|
|
|
|
|
|
|
|
|
self.assertTrue(np.allclose(static_loss_value, dy_loss._numpy()))
|
|
|
|
|
self.assertTrue(np.allclose(static_last_cell_value, last_cell._numpy()))
|
|
|
|
|
self.assertTrue(
|
|
|
|
@ -340,13 +338,11 @@ class TestDygraphPtbRnn(unittest.TestCase):
|
|
|
|
|
for key, value in six.iteritems(static_param_init):
|
|
|
|
|
# print("static_init name: {}, value {}".format(key, value))
|
|
|
|
|
# print("dy_init name: {}, value {}".format(key, dy_param_init[key]))
|
|
|
|
|
self.assertTrue(np.allclose(value, dy_param_init[key], atol=1e-5))
|
|
|
|
|
self.assertTrue(np.allclose(value, dy_param_init[key]))
|
|
|
|
|
for key, value in six.iteritems(static_param_updated):
|
|
|
|
|
# print("static name: {}, value {}".format(key, value))
|
|
|
|
|
# print("dy name: {}, value {}".format(key, dy_param_updated[key]))
|
|
|
|
|
self.assertTrue(
|
|
|
|
|
np.allclose(
|
|
|
|
|
value, dy_param_updated[key], atol=1e-5))
|
|
|
|
|
self.assertTrue(np.allclose(value, dy_param_updated[key]))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|