Python theano.scan() Examples
The following are 30
code examples of theano.scan().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
theano
, or try the search function
.
Example #1
Source File: plain_rnn.py From spinn with MIT License | 6 votes |
def _make_scan(self): """Build the sequential composition / scan graph.""" batch_size, seq_length = self.X.shape # Look up all of the embeddings that will be used. raw_embeddings = self.embeddings[self.X] # batch_size * seq_length * emb_dim raw_embeddings = raw_embeddings.dimshuffle(1, 0, 2) # Initialize the hidden state. hidden_init = T.zeros((batch_size, self.model_dim)) self.states = theano.scan( self._step, sequences=[raw_embeddings], outputs_info=[hidden_init])[0] self.final_representations = self.states[-1] self.transitions_pred = T.zeros((batch_size, 0)) self.predict_transitions = False self.tracking_state_final = None
Example #2
Source File: theano_backend.py From Att-ChemdNER with Apache License 2.0 | 6 votes |
def ctc_path_probs(predict, Y, alpha=1e-4): smoothed_predict = (1 - alpha) * predict[:, Y] + alpha * np.float32(1.) / Y.shape[0] L = T.log(smoothed_predict) zeros = T.zeros_like(L[0]) log_first = zeros f_skip_idxs = ctc_create_skip_idxs(Y) b_skip_idxs = ctc_create_skip_idxs(Y[::-1]) # there should be a shortcut to calculating this def step(log_f_curr, log_b_curr, f_active, log_f_prev, b_active, log_b_prev): f_active_next, log_f_next = ctc_update_log_p(f_skip_idxs, zeros, f_active, log_f_curr, log_f_prev) b_active_next, log_b_next = ctc_update_log_p(b_skip_idxs, zeros, b_active, log_b_curr, log_b_prev) return f_active_next, log_f_next, b_active_next, log_b_next [f_active, log_f_probs, b_active, log_b_probs], _ = theano.scan( step, sequences=[L, L[::-1, ::-1]], outputs_info=[np.int32(1), log_first, np.int32(1), log_first]) idxs = T.arange(L.shape[1]).dimshuffle('x', 0) mask = (idxs < f_active.dimshuffle(0, 'x')) & (idxs < b_active.dimshuffle(0, 'x'))[::-1, ::-1] log_probs = log_f_probs + log_b_probs[::-1, ::-1] - L return log_probs, mask
Example #3
Source File: model.py From text_convnet with MIT License | 6 votes |
def calculate(self, input): P = self.P Q = self.Q R = self.R decay = self.decay f_0 = T.zeros((input.shape[1], self.n_out), dtype=theano.config.floatX) ([f1, s1, f2, s2, f3], updates) = theano.scan( fn = StrConvLayer.loop_one_step, sequences = input, outputs_info = [ f_0, f_0, f_0, f_0, f_0 ], non_sequences = [ P, Q, R, decay ] ) return f1, s1, f2, s2, f3 # ### # Dynamic programming to calculate aggregated unigram to trigram representation vectors # ###
Example #4
Source File: test_printing.py From D-VAE with MIT License | 6 votes |
def test_printing_scan(): # Skip test if pydot is not available. if not theano.printing.pydot_imported: raise SkipTest('pydot not available') def f_pow2(x_tm1): return 2 * x_tm1 state = theano.tensor.scalar('state') n_steps = theano.tensor.iscalar('nsteps') output, updates = theano.scan(f_pow2, [], state, [], n_steps=n_steps, truncate_gradient=-1, go_backwards=False) f = theano.function([state, n_steps], output, updates=updates, allow_input_downcast=True) theano.printing.pydotprint(output, scan_graphs=True) theano.printing.pydotprint(f, scan_graphs=True)
Example #5
Source File: rnn.py From theano-recurrence with MIT License | 6 votes |
def generative_sampling(self, seed, emb_data, sample_length): fruit = theano.shared(value=seed) def step(h_tm, y_tm): h_t = self.activation(T.dot(emb_data[y_tm], self.W) + T.dot(h_tm, self.U) + self.bh) y_t = T.nnet.softmax(T.dot(h_t, self.V) + self.by) y = T.argmax(y_t, axis=1) return h_t, y[0] [_, samples], _ = theano.scan(fn=step, outputs_info=[self.h0, fruit], n_steps=sample_length) get_samples = theano.function(inputs=[], outputs=samples) return get_samples()
Example #6
Source File: neuagent.py From dl4ir-webnav with BSD 3-Clause "New" or "Revised" License | 6 votes |
def compute_emb(x, W): def _step(xi, emb, W): if prm.att_doc: new_shape = (xi.shape[0], xi.shape[1], xi.shape[2], prm.dim_emb) else: new_shape = (xi.shape[0], xi.shape[1], prm.dim_emb) out = W[xi.flatten()].reshape(new_shape).sum(-2) return out / tensor.maximum(1., tensor.neq(xi,-1).astype('float32').sum(-1, keepdims=True)) if prm.att_doc: emb_init = tensor.alloc(0., x.shape[1], x.shape[2], prm.dim_emb) else: emb_init = tensor.alloc(0., x.shape[1], prm.dim_emb) (embs), scan_updates = theano.scan(_step, sequences=[x], outputs_info=[emb_init], non_sequences=[W], name='emb_scan', n_steps=x.shape[0]) return embs
Example #7
Source File: nn.py From Att-ChemdNER with Apache License 2.0 | 6 votes |
def link(self,attended,state,source): step_function=self.step; attended_=T.tanh(T.dot(attended,self.W_A_X))+self.b_A_X; #attended_=attended; [energy,glimpsed],_=theano.scan(fn=step_function, sequences=[attended_], outputs_info=None, non_sequences=[attended_,source]); self.energy=energy; #combine #combine=T.concatenate([glimpsed,attended],axis=-1); combine=T.concatenate([glimpsed,source],axis=-1); combined=T.tanh(T.dot(combine,self.W_A_combine))+self.b_A_combine; #no source #combined=T.tanh(T.dot(glimpsed,self.W_A_combine))+self.b_A_combine; return combined;
Example #8
Source File: layers_theano.py From visual_dynamics with MIT License | 6 votes |
def get_output_for(self, inputs, *args, **kwargs): input_, W = inputs border_mode = 'half' if self.pad == 'same' else self.pad conved, updates = theano.scan(fn=lambda input_, W: self.convolution(input_[None, :, :, :], W, (1,) + self.input_shape[1:], self.get_W_shape(), subsample=self.stride, filter_dilation=self.filter_dilation, border_mode=border_mode, filter_flip=self.flip_filters).dimshuffle(*range(4)[1:]), outputs_info=None, sequences=[input_, W]) if self.b is None: activation = conved elif self.untie_biases: activation = conved + T.shape_padleft(self.b, 1) else: activation = conved + self.b.dimshuffle(('x', 0) + ('x',) * self.n) return self.nonlinearity(activation)
Example #9
Source File: output_sequence.py From gated-graph-transformer-network with MIT License | 6 votes |
def process(self, input_vector, seq_len): """ Convert an input vector into a sequence of categorical distributions Params: input_vector: Vector of shape (n_batch, input_width) seq_len: How many outputs to produce Returns: Sequence distribution of shape (n_batch, seq_len, num_words) """ n_batch = input_vector.shape[0] outputs_info = [self._seq_gru.initial_state(n_batch)] scan_step = lambda state, ipt: self._seq_gru.step(ipt, state) all_out, _ = theano.scan(scan_step, non_sequences=[input_vector], n_steps=seq_len, outputs_info=outputs_info) # all_out is of shape (seq_len, n_batch, state_size). Squash and apply layer flat_out = all_out.reshape([-1, self._state_size]) flat_final = self._transform_stack.process(flat_out) final = flat_final.reshape([seq_len, n_batch, self._num_words]).dimshuffle([1,0,2]) return final
Example #10
Source File: test_scan_utils.py From D-VAE with MIT License | 6 votes |
def test_scan_with_shared_update2(self): x = tensor.vector('x') # counts how many times its value is used counter = theano.shared(0, name="shared") counter.update = counter + 1 def step(x, a): r = a + x # introducing a shared variable with an update into the # inner graph is unsupported and the code must crash rather # than silently produce the wrong result. r.tag.replacement = counter * (a - x) # the shared variable was already present, but the # replacement changes the number of times it is used, # which would have to change the updates, which is # unsupported. return r + counter s, _ = theano.scan(step, sequences=x, outputs_info=[numpy.array(0.)]) self.assertRaises(NotImplementedError, map_variables, self.replacer, [s])
Example #11
Source File: test_scan_utils.py From D-VAE with MIT License | 6 votes |
def test_scan_with_shared_update(self): x = tensor.vector('x') # counts how many times its value is used counter = theano.shared(0, name="shared") counter.update = counter + 1 def step(x, a): r = a + x # introducing a shared variable with an update into the # inner graph is unsupported and the code must crash rather # than silently produce the wrong result. r.tag.replacement = counter * (a - x) return r s, _ = theano.scan(step, sequences=x, outputs_info=[numpy.array(0.)]) self.assertRaises(NotImplementedError, map_variables, self.replacer, [s])
Example #12
Source File: recurrent.py From CAPTCHA-breaking with MIT License | 6 votes |
def get_output(self, train=False): X = self.get_input(train) # shape: (nb_samples, time (padded with zeros), input_dim) # new shape: (time, nb_samples, input_dim) -> because theano.scan iterates over main dimension padded_mask = self.get_padded_shuffled_mask(train, X, pad=1) X = X.dimshuffle((1, 0, 2)) x = T.dot(X, self.W) + self.b # scan = theano symbolic loop. # See: http://deeplearning.net/software/theano/library/scan.html # Iterate over the first dimension of the x array (=time). outputs, updates = theano.scan( self._step, # this will be called with arguments (sequences[i], outputs[i-1], non_sequences[i]) sequences=[x, dict(input=padded_mask, taps=[-1])], # tensors to iterate over, inputs to _step # initialization of the output. Input to _step with default tap=-1. outputs_info=T.unbroadcast(alloc_zeros_matrix(X.shape[1], self.output_dim), 1), non_sequences=self.U, # static inputs to _step truncate_gradient=self.truncate_gradient) if self.return_sequences: return outputs.dimshuffle((1, 0, 2)) return outputs[-1]
Example #13
Source File: recurrent.py From CAPTCHA-breaking with MIT License | 6 votes |
def get_output(self, train=False): X = self.get_input(train) padded_mask = self.get_padded_shuffled_mask(train, X, pad=1) X = X.dimshuffle((1, 0, 2)) x_z = T.dot(X, self.W_z) + self.b_z x_r = T.dot(X, self.W_r) + self.b_r x_h = T.dot(X, self.W_h) + self.b_h outputs, updates = theano.scan( self._step, sequences=[x_z, x_r, x_h, padded_mask], outputs_info=T.unbroadcast(alloc_zeros_matrix(X.shape[1], self.output_dim), 1), non_sequences=[self.U_z, self.U_r, self.U_h], truncate_gradient=self.truncate_gradient) if self.return_sequences: return outputs.dimshuffle((1, 0, 2)) return outputs[-1]
Example #14
Source File: recurrent.py From CAPTCHA-breaking with MIT License | 6 votes |
def get_output(self, train=False): X = self.get_input(train) padded_mask = self.get_padded_shuffled_mask(train, X, pad=1) X = X.dimshuffle((1, 0, 2)) xi = T.dot(X, self.W_i) + self.b_i xf = T.dot(X, self.W_f) + self.b_f xc = T.dot(X, self.W_c) + self.b_c xo = T.dot(X, self.W_o) + self.b_o [outputs, memories], updates = theano.scan( self._step, sequences=[xi, xf, xo, xc, padded_mask], outputs_info=[ T.unbroadcast(alloc_zeros_matrix(X.shape[1], self.output_dim), 1), T.unbroadcast(alloc_zeros_matrix(X.shape[1], self.output_dim), 1) ], non_sequences=[self.U_i, self.U_f, self.U_o, self.U_c], truncate_gradient=self.truncate_gradient) if self.return_sequences: return outputs.dimshuffle((1, 0, 2)) return outputs[-1]
Example #15
Source File: recurrent.py From CAPTCHA-breaking with MIT License | 6 votes |
def get_output(self, train=False): X = self.get_input(train) padded_mask = self.get_padded_shuffled_mask(train, X, pad=1) X = X.dimshuffle((1, 0, 2)) x_z = T.dot(X, self.W_z) + self.b_z x_r = T.dot(X, self.Pmat) + self.b_r x_h = T.dot(X, self.W_h) + self.b_h outputs, updates = theano.scan( self._step, sequences=[x_z, x_r, x_h, padded_mask], outputs_info=T.unbroadcast(alloc_zeros_matrix(X.shape[1], self.output_dim), 1), non_sequences=[self.U_z, self.U_r, self.U_h], truncate_gradient=self.truncate_gradient) if self.return_sequences: return outputs.dimshuffle((1, 0, 2)) return outputs[-1]
Example #16
Source File: recurrent.py From CAPTCHA-breaking with MIT License | 6 votes |
def get_output(self, train=False): X = self.get_input(train) padded_mask = self.get_padded_shuffled_mask(train, X, pad=1) X = X.dimshuffle((1, 0, 2)) x_z = T.dot(X, self.W_z) + self.b_z x_r = T.dot(X, self.W_r) + self.b_r x_h = T.dot(X, self.W_h) + self.b_h outputs, updates = theano.scan( self._step, sequences=[x_z, x_r, x_h, padded_mask], outputs_info=T.unbroadcast(alloc_zeros_matrix(X.shape[1], self.output_dim), 1), non_sequences=[self.U_z, self.U_r, self.U_h], truncate_gradient=self.truncate_gradient ) if self.return_sequences: return outputs.dimshuffle((1, 0, 2)) return outputs[-1]
Example #17
Source File: scan_opt.py From D-VAE with MIT License | 6 votes |
def inner_sitsot_only_last_step_used(self, var, scan_args): """ Given a inner nit_sot output of scan, return True iff the outer nit_sot output has only one client and that client is a Subtensor instance that takes only the last step (last element along the first axis). """ idx = scan_args.inner_out_sit_sot.index(var) outer_var = scan_args.outer_out_sit_sot[idx] if len(outer_var.clients) == 1: client = outer_var.clients[0][0] if (client != 'output' and isinstance(client.op, theano.tensor.Subtensor)): lst = theano.tensor.subtensor.get_idx_list( client.inputs, client.op.idx_list) if (len(lst) == 1 and theano.tensor.extract_constant(lst[0]) == -1): return True return False
Example #18
Source File: rbm_pretraining.py From Projects with MIT License | 6 votes |
def get_cost_updates(self, lr=0.1, persistent=None, k=1): pre_sigmoid_ph, ph_mean, ph_sample = self.sample_h_given_v(self.input) if persistent is None: chain_start = ph_sample else: chain_start = persistent ([pre_sigmoid_nvs,nv_means,nv_samples,pre_sigmoid_nhs,nh_means,nh_samples],updates) = \ theano.scan(self.gibbs_step, outputs_info=[None, None, None, None, None, chain_start],n_steps=k,name="gibbs_step") chain_end = nv_samples[-1] cost = T.mean(self.free_energy(self.input)) - T.mean(self.free_energy(chain_end)) gparams = T.grad(cost, self.params, consider_constant=[chain_end]) for gparam, param in zip(gparams, self.params): updates[param] = param - gparam * T.cast(lr,dtype=theano.config.floatX) if persistent: updates[persistent] = nh_samples[-1] monitoring_cost = self.get_pseudo_likelihood_cost(updates) else: monitoring_cost = self.get_reconstruction_cost(updates,pre_sigmoid_nvs[-1]) return monitoring_cost, updates
Example #19
Source File: test_scan_opt.py From D-VAE with MIT License | 5 votes |
def test_dot_not_output(self): """ Test the case where the vector input to the dot is not already an output of the inner function. """ v = T.vector() m = T.matrix() output = T.dot(v, m) # Compile the function twice, once with the optimization and once # without opt_mode = mode.including("scan") f_opt = theano.function([v, m], T.jacobian(output, v), mode=opt_mode) no_opt_mode = mode.excluding("scanOp_pushout_output") f_no_opt = theano.function([v, m], T.jacobian(output, v), mode=no_opt_mode) # Ensure that the optimization was performed correctly in f_opt # The inner function of scan should have only one output and it should # not be the result of a Dot scan_node = [node for node in f_opt.maker.fgraph.toposort() if isinstance(node.op, Scan)][0] assert len(scan_node.op.outputs) == 1 assert not isinstance(scan_node.op.outputs[0], T.Dot) # Ensure that the function compiled with the optimization produces # the same results as the function compiled without v_value = numpy.random.random((4)).astype(config.floatX) m_value = numpy.random.random((4, 5)).astype(config.floatX) output_opt = f_opt(v_value, m_value) output_no_opt = f_no_opt(v_value, m_value) utt.assert_allclose(output_opt, output_no_opt)
Example #20
Source File: test_compute_test_value.py From D-VAE with MIT License | 5 votes |
def test_scan_err1(self): # This test should fail when building fx for the first time orig_compute_test_value = theano.config.compute_test_value try: theano.config.compute_test_value = 'raise' k = T.iscalar("k") A = T.matrix("A") k.tag.test_value = 3 A.tag.test_value = numpy.random.rand(5, 3).astype(config.floatX) def fx(prior_result, A): return T.dot(prior_result, A) # Since we have to inspect the traceback, # we cannot simply use self.assertRaises() try: theano.scan( fn=fx, outputs_info=T.ones_like(A), non_sequences=A, n_steps=k) assert False except ValueError: # Get traceback tb = sys.exc_info()[2] # Get frame info 4 layers up frame_info = traceback.extract_tb(tb)[-5] # We should be in the "fx" function defined above expected = 'test_compute_test_value.py' assert os.path.split(frame_info[0])[1] == expected, frame_info assert frame_info[2] == 'fx' finally: theano.config.compute_test_value = orig_compute_test_value
Example #21
Source File: test_compute_test_value.py From D-VAE with MIT License | 5 votes |
def test_scan(self): """ Test the compute_test_value mechanism Scan. """ orig_compute_test_value = theano.config.compute_test_value try: theano.config.compute_test_value = 'raise' # theano.config.compute_test_value = 'warn' k = T.iscalar("k") A = T.vector("A") k.tag.test_value = 3 A.tag.test_value = numpy.random.rand(5).astype(config.floatX) def fx(prior_result, A): return prior_result * A # Symbolic description of the result result, updates = theano.scan(fn=fx, outputs_info=T.ones_like(A), non_sequences=A, n_steps=k) # We only care about A**k, but scan has provided us with A**1 through A**k. # Discard the values that we don't care about. Scan is smart enough to # notice this and not waste memory saving them. final_result = result[-1] assert hasattr(final_result.tag, 'test_value') finally: theano.config.compute_test_value = orig_compute_test_value
Example #22
Source File: test_rng_mrg.py From D-VAE with MIT License | 5 votes |
def test_gradient_scan(): # Test for a crash when using MRG inside scan and taking the gradient # See https://groups.google.com/d/msg/theano-dev/UbcYyU5m-M8/UO9UgXqnQP0J theano_rng = MRG_RandomStreams(10) w = theano.shared(numpy.ones(1, dtype='float32')) def one_step(x): return x + theano_rng.uniform((1,), dtype='float32') * w x = tensor.vector(dtype='float32') values, updates = theano.scan(one_step, outputs_info=x, n_steps=10) gw = theano.grad(tensor.sum(values[-1]), w) f = theano.function([x], gw) f(numpy.arange(1, dtype='float32'))
Example #23
Source File: gru.py From theano-recurrence with MIT License | 5 votes |
def generative_sampling(self, seed, emb_data, sample_length): fruit = theano.shared(value=seed) def step(h_tm, y_tm): x_z = T.dot(emb_data[y_tm], self.W_z) + self.b_z x_r = T.dot(emb_data[y_tm], self.W_r) + self.b_r x_h = T.dot(emb_data[y_tm], self.W) + self.b_h z_t = self.inner_activation(x_z + T.dot(h_tm, self.U_z)) r_t = self.inner_activation(x_r + T.dot(h_tm, self.U_r)) hh_t = self.activation(x_h + T.dot(r_t * h_tm, self.U)) h_t = (T.ones_like(z_t) - z_t) * hh_t + z_t * h_tm y_t = T.nnet.softmax(T.dot(h_t, self.V) + self.b_y) y = T.argmax(y_t, axis=1) return h_t, y[0] [_, samples], _ = theano.scan(fn=step, outputs_info=[self.h0, fruit], n_steps=sample_length) get_samples = theano.function(inputs=[], outputs=samples) return get_samples()
Example #24
Source File: scan_opt.py From D-VAE with MIT License | 5 votes |
def apply(self, fgraph): # Collect all scan nodes ordered according to toposort scan_nodes = [nd for nd in fgraph.toposort() if isinstance(nd.op, scan_op.Scan)] # All sets of possibly mergeable nodes all_sets = [] for nd in scan_nodes: belongs_to_set_idx = -1 for pos, subset in enumerate(all_sets): if self.belongs_to_set(nd, subset): belongs_to_set_idx = pos # It is possible that nd belongs to more than one subset. # For instance, if we have 3 Scan nodes X, Y and Z, if Z # depends on the output of X, then X and Z are incompatible # and would create different subsets, but Y could be # compatible with both X and Z. We choose the first one. break if belongs_to_set_idx == -1: all_sets.append([nd]) else: all_sets[belongs_to_set_idx].append(nd) for subset in all_sets: if len(subset) > 1: proposal = self.merge(subset) fgraph.replace_all_validate_remove(proposal, remove=subset, reason='scanOp_merge')
Example #25
Source File: scan_opt.py From D-VAE with MIT License | 5 votes |
def add_nitsot_outputs(self, fgraph, old_scan_node, old_scan_args, new_outputs_inner): nb_new_outs = len(new_outputs_inner) # Create the initial values for the new nitsot outputs # (the initial value is the nb of steps to store. For a nistot, # it should be the number of steps performed by scan) new_nitsots_initial_value = [old_scan_node.inputs[0] for i in range(nb_new_outs)] # Create the scan_args corresponding to the new scan op to # create new_scan_args = copy.copy(old_scan_args) new_scan_args.inner_out_nit_sot.extend(new_outputs_inner) new_scan_args.outer_in_nit_sot.extend(new_nitsots_initial_value) # Create the scan op from the scan_args new_scan_op = scan_op.Scan(new_scan_args.inner_inputs, new_scan_args.inner_outputs, new_scan_args.info) # Create the Apply node for the scan op new_scan_node = new_scan_op(*new_scan_args.outer_inputs, **dict(return_list=True))[0].owner # Modify the outer graph to make sure the outputs of the new scan are # used instead of the outputs of the old scan new_node_new_outputs_idx = (len(old_scan_args.outer_outputs) - len(old_scan_args.outer_out_shared)) new_node_old_outputs = ( new_scan_node.outputs[:new_node_new_outputs_idx] + new_scan_node.outputs[new_node_new_outputs_idx + nb_new_outs:]) fgraph.replace_all_validate_remove( list(zip(old_scan_node.outputs, new_node_old_outputs)), remove=[old_scan_node], reason='scanOp_pushout_output') return new_scan_node
Example #26
Source File: scan_opt.py From D-VAE with MIT License | 5 votes |
def get_outer_ndim(self, var, scan_args): # Given a variable, determine the number of dimension it would have if # it was pushed out of scan if (var in scan_args.inner_in_non_seqs or isinstance(var, theano.Constant)): outer_ndim = var.ndim else: outer_ndim = var.ndim + 1 return outer_ndim
Example #27
Source File: lstm.py From theano-recurrence with MIT License | 5 votes |
def generative_sampling(self, seed, emb_data, sample_length): fruit = theano.shared(value=seed) def step(c_tm, h_tm, y_tm): x_i = T.dot(emb_data[y_tm], self.W_i) + self.b_i x_f = T.dot(emb_data[y_tm], self.W_f) + self.b_f x_c = T.dot(emb_data[y_tm], self.W_c) + self.b_c x_o = T.dot(emb_data[y_tm], self.W_o) + self.b_o i_t = self.inner_activation(x_i + T.dot(h_tm, self.U_i)) f_t = self.inner_activation(x_f + T.dot(h_tm, self.U_f)) c_t = f_t * c_tm + i_t * self.activation(x_c + T.dot(h_tm, self.U_c)) # internal memory o_t = self.inner_activation(x_o + T.dot(h_tm, self.U_o)) h_t = o_t * self.activation(c_t) # actual hidden state y_t = T.nnet.softmax(T.dot(h_t, self.V) + self.b_y) y = T.argmax(y_t, axis=1) return c_t, h_t, y[0] [_, _, samples], _ = theano.scan(fn=step, outputs_info=[self.c0, self.h0, fruit], n_steps=sample_length) get_samples = theano.function(inputs=[], outputs=samples) return get_samples()
Example #28
Source File: nn.py From Att-ChemdNER with Apache License 2.0 | 5 votes |
def link(self, input): #{{{ """ Propagate the input through the network and return the last hidden vector. The whole sequence is also accessible via self.h, but where self.h of shape (sequence_length, batch_size, output_dim) """ # If we use batches, we have to permute the first and second dimension. if self.with_batch: self.input = input.dimshuffle(1, 0, 2) initial_states = [T.alloc(x, self.input.shape[1], self.output_dim) for x in [self.h_0, self.c_0]] else: self.input = input initial_states = [self.h_0, self.c_0] [h,c], _ = theano.scan( fn=self.step, sequences=self.input, outputs_info=initial_states, ) self.h = h self.c=c self.output = h[-1] return self.output #}}} #}}}
Example #29
Source File: scan_opt.py From D-VAE with MIT License | 5 votes |
def warning(*msg): _logger.warning('WARNING theano.scan: ' + ' '.join(msg))
Example #30
Source File: scan_utils.py From D-VAE with MIT License | 5 votes |
def scan_can_remove_outs(op, out_idxs): """ Looks at all outputs defined by indices ``out_idxs`` and see whom can be removed from the scan op without affecting the rest. Return two lists, the first one with the indices of outs that can be removed, the second with the outputs that can not be removed. """ non_removable = [o for i, o in enumerate(op.outputs) if i not in out_idxs] required_inputs = gof.graph.inputs(non_removable) out_ins = [] offset = op.n_seqs lim = op.n_mit_mot + op.n_mit_sot + op.n_sit_sot for idx in range(lim): n_ins = len(op.info['tap_array'][idx]) out_ins += [op.inputs[offset:offset + n_ins]] offset += n_ins out_ins += [[] for k in xrange(op.n_nit_sot)] out_ins += [[op.inputs[offset + k]] for k in xrange(op.n_shared_outs)] added = True out_idxs_mask = [1 for idx in out_idxs] while added: added = False for pos, idx in enumerate(out_idxs): if (out_idxs_mask[pos] and numpy.any([x in required_inputs for x in out_ins[idx]])): # This output is required .. out_idxs_mask[pos] = 0 required_inputs += gof.graph.inputs([op.outputs[idx]]) added = True required_outs = [x for i, x in enumerate(out_idxs) if out_idxs_mask[i] == 0] not_required = [x for i, x in enumerate(out_idxs) if out_idxs_mask[i] == 1] return (required_outs, not_required)