示例#1
0
 def testBidirectionGridLSTMCellWithSliceOffset(self):
   with self.test_session() as sess:
     num_units = 2
     batch_size = 3
     input_size = 4
     feature_size = 2
     frequency_skip = 1
     num_shifts = int((input_size - feature_size) / frequency_skip + 1)
     expected_output = np.array(
         [[0.464130, 0.464130, 0.419165, 0.419165, 0.593283, 0.593283,
           0.738350, 0.738350, 0.661638, 0.661638, 0.866774, 0.866774,
           0.322645, 0.322645, 0.276068, 0.276068, 0.584654, 0.584654,
           0.690292, 0.690292, 0.640446, 0.640446, 0.840071, 0.840071],
          [0.669636, 0.669636, 0.628966, 0.628966, 0.736057, 0.736057,
           0.895927, 0.895927, 0.755559, 0.755559, 0.954359, 0.954359,
           0.493625, 0.493625, 0.449236, 0.449236, 0.730828, 0.730828,
           0.865996, 0.865996, 0.749429, 0.749429, 0.944958, 0.944958],
          [0.751109, 0.751109, 0.711716, 0.711716, 0.778357, 0.778357,
           0.940779, 0.940779, 0.784530, 0.784530, 0.980604, 0.980604,
           0.608587, 0.608587, 0.566683, 0.566683, 0.777345, 0.777345,
           0.925820, 0.925820, 0.782597, 0.782597, 0.976858, 0.976858]],
         dtype=np.float32)
     expected_state = np.array(
         [[0.710660, 0.710660, 0.464130, 0.464130, 0.877293, 0.877293,
           0.593283, 0.593283, 0.958505, 0.958505, 0.661638, 0.661638,
           0.516575, 0.516575, 0.322645, 0.322645, 0.866628, 0.866628,
           0.584654, 0.584654, 0.934002, 0.934002, 0.640446, 0.640446],
          [0.967579, 0.967579, 0.669636, 0.669636, 1.038811, 1.038811,
           0.736057, 0.736057, 1.058201, 1.058201, 0.755559, 0.755559,
           0.749836, 0.749836, 0.493625, 0.493625, 1.033488, 1.033488,
           0.730828, 0.730828, 1.052186, 1.052186, 0.749429, 0.749429],
          [1.053842, 1.053842, 0.751109, 0.751109, 1.079919, 1.079919,
           0.778357, 0.778357, 1.085620, 1.085620, 0.784530, 0.784530,
           0.895999, 0.895999, 0.608587, 0.608587, 1.078978, 1.078978,
           0.777345, 0.777345, 1.083843, 1.083843, 0.782597, 0.782597]],
         dtype=np.float32)
     with variable_scope.variable_scope(
         "root", initializer=init_ops.constant_initializer(0.5)):
       cell = rnn_cell.BidirectionalGridLSTMCell(
           num_units=num_units,
           feature_size=feature_size,
           share_time_frequency_weights=True,
           frequency_skip=frequency_skip,
           forget_bias=1.0,
           num_frequency_blocks=[num_shifts],
           backward_slice_offset=1)
       inputs = constant_op.constant(
           np.array([[1.0, 1.1, 1.2, 1.3],
                     [2.0, 2.1, 2.2, 2.3],
                     [3.0, 3.1, 3.2, 3.3]],
                    dtype=np.float32),
           dtype=dtypes.float32)
       state_value = constant_op.constant(
           0.1 * np.ones(
               (batch_size, num_units), dtype=np.float32),
           dtype=dtypes.float32)
       init_state = cell.state_tuple_type(
           *([state_value, state_value] * num_shifts * 2))
       output, state = cell(inputs, init_state)
       sess.run([variables.global_variables_initializer()])
       res = sess.run([output, state])
       self.assertEqual(len(res), 2)
       # The numbers in results were not calculated, this is mostly just a
       # smoke test.
       self.assertEqual(res[0].shape, (batch_size, num_units * num_shifts * 4))
       self.assertAllClose(res[0], expected_output)
       # There should be num_shifts * 4 states in the tuple.
       self.assertEqual(len(res[1]), num_shifts * 4)
       # Checking the shape of each state to be batch_size * num_units
       for ss in res[1]:
         self.assertEqual(ss.shape[0], batch_size)
         self.assertEqual(ss.shape[1], num_units)
       self.assertAllClose(np.concatenate(res[1], axis=1), expected_state)
示例#2
0
 def testBidirectionGridLSTMCell(self):
   with self.test_session() as sess:
     num_units = 2
     batch_size = 3
     input_size = 4
     feature_size = 2
     frequency_skip = 1
     num_shifts = int((input_size - feature_size) / frequency_skip + 1)
     expected_output = np.array(
         [[0.464130, 0.464130, 0.419165, 0.419165, 0.593283, 0.593283,
           0.738350, 0.738350, 0.661638, 0.661638, 0.866774, 0.866774,
           0.520789, 0.520789, 0.476968, 0.476968, 0.604341, 0.604341,
           0.760207, 0.760207, 0.635773, 0.635773, 0.850218, 0.850218],
          [0.669636, 0.669636, 0.628966, 0.628966, 0.736057, 0.736057,
           0.895927, 0.895927, 0.755559, 0.755559, 0.954359, 0.954359,
           0.692621, 0.692621, 0.652363, 0.652363, 0.737517, 0.737517,
           0.899558, 0.899558, 0.745984, 0.745984, 0.946840, 0.946840],
          [0.751109, 0.751109, 0.711716, 0.711716, 0.778357, 0.778357,
           0.940779, 0.940779, 0.784530, 0.784530, 0.980604, 0.980604,
           0.759940, 0.759940, 0.720652, 0.720652, 0.778552, 0.778552,
           0.941606, 0.941606, 0.781035, 0.781035, 0.977731, 0.977731]],
         dtype=np.float32)
     expected_state = np.array(
         [[0.710660, 0.710660, 0.464130, 0.464130, 0.877293, 0.877293,
           0.593283, 0.593283, 0.958505, 0.958505, 0.661638, 0.661638,
           0.785405, 0.785405, 0.520789, 0.520789, 0.890836, 0.890836,
           0.604341, 0.604341, 0.928512, 0.928512, 0.635773, 0.635773],
          [0.967579, 0.967579, 0.669636, 0.669636, 1.038811, 1.038811,
           0.736057, 0.736057, 1.058201, 1.058201, 0.755559, 0.755559,
           0.993088, 0.993088, 0.692621, 0.692621, 1.040288, 1.040288,
           0.737517, 0.737517, 1.048773, 1.048773, 0.745984, 0.745984],
          [1.053842, 1.053842, 0.751109, 0.751109, 1.079919, 1.079919,
           0.778357, 0.778357, 1.085620, 1.085620, 0.784530, 0.784530,
           1.062455, 1.062455, 0.759940, 0.759940, 1.080101, 1.080101,
           0.778552, 0.778552, 1.082402, 1.082402, 0.781035, 0.781035]],
         dtype=np.float32)
     with variable_scope.variable_scope(
         "root", initializer=init_ops.constant_initializer(0.5)):
       cell = rnn_cell.BidirectionalGridLSTMCell(
           num_units=num_units,
           feature_size=feature_size,
           share_time_frequency_weights=True,
           frequency_skip=frequency_skip,
           forget_bias=1.0,
           num_frequency_blocks=[num_shifts])
       inputs = constant_op.constant(
           np.array([[1.0, 1.1, 1.2, 1.3],
                     [2.0, 2.1, 2.2, 2.3],
                     [3.0, 3.1, 3.2, 3.3]],
                    dtype=np.float32),
           dtype=dtypes.float32)
       state_value = constant_op.constant(
           0.1 * np.ones(
               (batch_size, num_units), dtype=np.float32),
           dtype=dtypes.float32)
       init_state = cell.state_tuple_type(
           *([state_value, state_value] * num_shifts * 2))
       output, state = cell(inputs, init_state)
       sess.run([variables.global_variables_initializer()])
       res = sess.run([output, state])
       self.assertEqual(len(res), 2)
       # The numbers in results were not calculated, this is mostly just a
       # smoke test.
       self.assertEqual(res[0].shape, (batch_size, num_units * num_shifts * 4))
       self.assertAllClose(res[0], expected_output)
       # There should be num_shifts * 4 states in the tuple.
       self.assertEqual(len(res[1]), num_shifts * 4)
       # Checking the shape of each state to be batch_size * num_units
       for ss in res[1]:
         self.assertEqual(ss.shape[0], batch_size)
         self.assertEqual(ss.shape[1], num_units)
       self.assertAllClose(np.concatenate(res[1], axis=1), expected_state)