def test_fprop_faster(self): activation = "tanh" seed = 1234 repeat = 1000 layer = LayerLSTM(input_size=DATA['features_size'], hidden_size=DATA['hidden_size'], activation=activation) layer.initialize(initer.UniformInitializer(seed)) layer_fast = LayerLSTMFast(input_size=DATA['features_size'], hidden_size=DATA['hidden_size'], activation=activation) # Wi, Wo, Wf, Wm layer_fast.W.set_value( np.concatenate([ layer.Wi.get_value(), layer.Wo.get_value(), layer.Wf.get_value(), layer.Wm.get_value() ], axis=1)) layer_fast.U.set_value( np.concatenate([ layer.Ui.get_value(), layer.Uo.get_value(), layer.Uf.get_value(), layer.Um.get_value() ], axis=1)) input = T.matrix('input') input.tag.test_value = DATA['batch_one_step'] last_h = sharedX(DATA['state_h']) last_m = sharedX(DATA['state_m']) fprop = theano.function([input], layer.fprop(input, last_h, last_m)) fprop_faster = theano.function([input], layer_fast.fprop(input, last_h, last_m)) fprop_time = measure("h, m = fprop(DATA['batch_one_step'])", repeat) fprop_faster_time = measure( "h, m = fprop_faster(DATA['batch_one_step'])", repeat) print("fprop time: {:.2f} sec.", fprop_time) print("fprop faster time: {:.2f} sec.", fprop_faster_time) print("Speedup: {:.2f}x".format(fprop_time / fprop_faster_time)) for i in range(DATA['seq_len']): h1, m1 = fprop(DATA['batch'][:, i, :]) h2, m2 = fprop_faster(DATA['batch'][:, i, :]) assert_array_equal(h1, h2) assert_array_equal(m1, m2)
def test_fprop(self): activation = "tanh" seed = 1234 repeat = 1000 layer = LayerLSTM(input_size=DATA['features_size'], hidden_size=DATA['hidden_size'], activation=activation) layer.initialize(initer.UniformInitializer(seed)) # input = T.tensor3('input') input = T.matrix('input') input.tag.test_value = DATA['batch_one_step'] last_h = sharedX(DATA['state_h']) last_m = sharedX(DATA['state_m']) fprop = theano.function([input], layer.fprop_faster(input, last_h, last_m)) fprop_time = measure("h, m = fprop(DATA['batch_one_step'])", repeat) print("fprop time: {:.2f} sec.", fprop_time) h, m = fprop(DATA['batch_one_step'])
def test_fprop_faster(self): activation = "tanh" seed = 1234 repeat = 1000 layer = LayerLSTM(input_size=DATA['features_size'], hidden_size=DATA['hidden_size'], activation=activation) layer.initialize(initer.UniformInitializer(seed)) layer_fast = LayerLSTMFast(input_size=DATA['features_size'], hidden_size=DATA['hidden_size'], activation=activation) # Wi, Wo, Wf, Wm layer_fast.W.set_value(np.concatenate([layer.Wi.get_value(), layer.Wo.get_value(), layer.Wf.get_value(), layer.Wm.get_value()], axis=1)) layer_fast.U.set_value(np.concatenate([layer.Ui.get_value(), layer.Uo.get_value(), layer.Uf.get_value(), layer.Um.get_value()], axis=1)) input = T.matrix('input') input.tag.test_value = DATA['batch_one_step'] last_h = sharedX(DATA['state_h']) last_m = sharedX(DATA['state_m']) fprop = theano.function([input], layer.fprop(input, last_h, last_m)) fprop_faster = theano.function([input], layer_fast.fprop(input, last_h, last_m)) fprop_time = measure("h, m = fprop(DATA['batch_one_step'])", repeat) fprop_faster_time = measure("h, m = fprop_faster(DATA['batch_one_step'])", repeat) print("fprop time: {:.2f} sec.", fprop_time) print("fprop faster time: {:.2f} sec.", fprop_faster_time) print("Speedup: {:.2f}x".format(fprop_time/fprop_faster_time)) for i in range(DATA['seq_len']): h1, m1 = fprop(DATA['batch'][:, i, :]) h2, m2 = fprop_faster(DATA['batch'][:, i, :]) assert_array_equal(h1, h2) assert_array_equal(m1, m2)