Right, W will stay independent, and x will depend on index_vector.
On Fri, Aug 19, 2016, shashank gupta wrote:
> Thanks Pascal for looking into it. So if I understand correctly, if I use
> the following operation :
>
> W = theano.shared.variable
>
> x = W[index_vector, :]
>
> This will redefine W to be dependent on index_vector?
>
>
>
> On Friday, August 19, 2016 at 5:00:20 AM UTC+5:30, Pascal Lamblin wrote:
> >
> > You seem to redefine self.W1 (for instance) to depend on uu, so when you
> > use it in the second part, you need uu as an input variable.
> >
> > On Sun, Jul 24, 2016, shashank gupta wrote:
> > > Hi,
> > >
> > > I am trying to build a model using the following definition:
> > >
> > > class user2vec(object):
> > > def __init__(self, n_user, d, h, n_item):
> > > self.n_user = n_user
> > > self.d = d
> > > self.h = h
> > > self.n_item = n_item
> > > # Shared parameter (user embedding vector)
> > > self.Wu = theano.shared(np.random.uniform(low = -
> > > np.sqrt(6.0/float(n_user + d)),\
> > > high = np.sqrt(6.0/float(n_user +
> > d)),\
> > >
> > > size=(n_user,d)).astype(theano.config.floatX))
> > > # Item embedding matrix
> > > self.Wi = theano.shared(np.random.uniform(low = -
> > > np.sqrt(6.0/float(n_item + d)),\
> > > high = np.sqrt(6.0/float(n_item +
> > d)),\
> > > size=(n_item
> > > ,d)).astype(theano.config.floatX))
> > >
> > > self.W1 = self.Wu
> > > self.W2 = self.Wi
> > >
> > > # Paramters for user-user model
> > > self.Wm1 =
> > theano.shared(np.random.uniform(low=-np.sqrt(6.0/float(h
> > > + d)),
> > > high = np.sqrt(6.0/float(h+d)),
> > >
> > > size=(h,d)).astype(theano.config.floatX))
> > > self.Wp1 = theano.shared(np.random.uniform(low= -
> > > np.sqrt(6.0/float(h + d)),
> > > high = np.sqrt(6.0/float(h+d)),
> > >
> > > size=(h,d)).astype(theano.config.floatX))
> > > # Param for single example model
> > > self.b11 = theano.shared(np.zeros((h),
> > dtype=theano.config.floatX))
> > > # Param for batch model
> > > self.B11 = theano.shared(np.zeros((h,1),
> > > dtype=theano.config.floatX), broadcastable=(False, True))
> > >
> > > # Param for single example model
> > > self.b21 = theano.shared(np.zeros((2),
> > dtype=theano.config.floatX))
> > > # Param for batch model
> > > self.B21 = theano.shared(np.zeros((2,1),
> > > dtype=theano.config.floatX), broadcastable=(False, True))
> > >
> > > self.U1 = theano.shared(np.random.uniform(low= -
> > > np.sqrt(6.0/float(2 + h)),\
> > > high = np.sqrt(6.0/float(2
> > +
> > > h)),
> > >
> > > size=(2,h)).astype(theano.config.floatX))
> > >
> > > # Parameters for user-item model
> > > self.Wm2 =
> > theano.shared(np.random.uniform(low=-np.sqrt(6.0/float(h
> > > + d)),
> > > high = np.sqrt(6.0/float(h+d)),
> > >
> > > size=(h,d)).astype(theano.config.floatX))
> > > self.Wp2 = theano.shared(np.random.uniform(low= -
> > > np.sqrt(6.0/float(h + d)),
> > > high = np.sqrt(6.0/float(h+d)),
> > >
> > > size=(h,d)).astype(theano.config.floatX))
> > > self.b12 = theano.shared(np.zeros((h),
> > dtype=theano.config.floatX))
> > > # Mini batch model param
> > > self.B12 = theano.shared(np.zeros((h,1),
> > > dtype=theano.config.floatX), broadcastable=(False, True))
> > >
> > >
> > > #elf.b22 = theano.shared(np.zeros((2),
> > dtype=theano.config.floatX))
> > > # Mini batch model param
> > > #elf.B22 = theano.shared(np.zeros((2),
> > dtype=theano.config.floatX),
> > > broadcastable=(False, True))
> > >
> > > self.U2 = theano.shared(np.random.uniform(low= -
> > > np.sqrt(6.0/float(2 + h)),\
> > > high = np.sqrt(6.0/float(2
> > +
> > > h)),
> > >
> > > size=(1,h)).astype(theano.config.floatX))
> > >
> > > self.params1 = [self.Wm1, self.Wp1, self.b11, self.b21, self.U1]
> > > self.Params1 = [self.Wm1, self.Wp1, self.B11, self.B21, self.U1]
> > >
> > > self.params2 = [self.Wm2, self.Wp2, self.b12, self.U2]
> > > self.Params2 = [self.Wm2, self.Wp2, self.B12, self.U2]
> > >
> > > def model_batch(self, lr=0.01):
> > > # U-U model
> > > # theano matrix storing node embeddings
> > > uu = T.imatrix()
> > > # Target labels for input
> > > yu = T.ivector()
> > > # Extract the word vectors corresponding to inputs
> > > U = self.W1[uu[:, 0],:]
> > > V = self.W1[uu[:, 1],:]
> > > #self.debug = theano.function([X], [U,V])
> > > hLm = U * V
> > > hLp = abs(U - V)
> > > hL = T.tanh(T.dot(self.Wm1, hLm.T) + T.dot(self.Wp1, hLp.T) +
> > > self.B11)
> > > #param = [U , V]
> > > #params.extend(self.params)
> > > # Likelihood
> > > l = T.nnet.softmax(T.dot(self.U1, hL) + self.B21)
> > > #cost = T.sum(T.nnet.binary_crossentropy(l, yu))
> > > cost = -T.mean(T.log(l[:, yu]))
> > > #cost = - T.sum(T.log(l + eps))
> > > #self.debug1 = theano.function([X,y], l)
> > > grad1 = T.grad(cost, [U,V])
> > > grads = T.grad(cost, self.Params1)
> > > #updates1 = [(self.W1, T.inc_subtensor(self.W[X[:, 0]],
> > grads[0]))]
> > > #updates2 = [(self.W, T.inc_subtensor(self.W1[X[:, 1]],
> > grads[1]))]
> > > self.W1 = T.set_subtensor(self.W1[uu[:,0], :], self.W1[uu[:,0],
> > :]
> > > - lr * grad1[0])
> > > self.W1 = T.set_subtensor(self.W1[uu[:,1], :], self.W1[uu[:,1],
> > :]
> > > - lr * grad1[1])
> > > updates11 = [(self.Wu, self.W1)]
> > > updates31 = [(param, param - lr * grad) for (param, grad) in
> > > zip(self.Params1, grads)]
> > > updates1 = updates11 + updates31
> > > self.uu_batch = theano.function([uu,yu], cost, updates=updates1)
> > > #mode=NanGuardMode(nan_is_error=True, inf_is_error=True,
> > big_is_error=True))
> > >
> > > # U-I model
> > > ui = T.imatrix()
> > > yi = T.vector()
> > >
> > > U1 = self.W1[ui[:, 0], :]
> > > I = self.W2[ui[:, 1], :]
> > >
> > > hLm1 = U1 * I
> > > hLp1 = abs(U1 - I)
> > > hL1 = T.tanh(T.dot(self.Wm2, hLm1.T) + T.dot(self.Wp2, hLp1) +
> > > self.B12)
> > > l1 = T.dot(self.U2, hL1)
> > > cost1 = T.mean((l1 - yi) ** 2)
> > > grad2 = T.grad(cost1, [U1, I])
> > > grads1 = T.grad(cost1, self.Params2)
> > > #print grads1
> > > self.W1 = T.set_subtensor(self.W1[ui[:, 0], :], self.W1[ui[:,
> > 0],
> > > :] - lr * grad2[0])
> > > self.W2 = T.set_subtensor(self.W2[ui[:, 1], :], self.W2[ui[:,
> > 1],
> > > :] - lr * grad2[1])
> > >
> > > updates21 = [(self.Wu, self.W1)]
> > > updates22 = [(self.Wi, self.W2)]
> > > updates23 = [(param, param - lr * grad) for (param, grad) in
> > > zip(self.Params2, grads1)]
> > > #pdb.set_trace()
> > > updates2 = updates21 + updates22 + updates23
> > > self.ui_batch = theano.function([ui, yi], cost1,
> > updates=updates2)
> > >
> > >
> > >
> > >
> > > When this model is compiled it gives the following error :
> > >
> > > File "/home/shashank/SIEL/Trust_network_embedding/social2vec/model.py",
> > > line 128, in model_batch
> > > self.ui_batch = theano.function([ui, yi], cost1, updates=updates2)
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/compile/function.py",
> >
> >
> > > line 320, in function
> > > output_keys=output_keys)
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/compile/pfunc.py",
> >
> >
> > > line 479, in pfunc
> > > output_keys=output_keys)
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/compile/function_module.py",
> >
> >
> > > line 1776, in orig_function
> > > output_keys=output_keys).create(
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/compile/function_module.py",
> >
> >
> > > line 1428, in __init__
> > > accept_inplace)
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/compile/function_module.py",
> >
> >
> > > line 177, in std_fgraph
> > > update_mapping=update_mapping)
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/gof/fg.py",
> > > line 171, in __init__
> > > self.__import_r__(output, reason="init")
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/gof/fg.py",
> > > line 360, in __import_r__
> > > self.__import__(variable.owner, reason=reason)
> > > File
> > >
> > "/home/shashank/cpuenv/local/lib/python2.7/site-packages/theano/gof/fg.py",
> > > line 474, in __import__
> > > r)
> > > theano.gof.fg.MissingInputError: ("An input of the graph, used to
> > compute
> > > Subtensor{::, int64}(<TensorType(int32, matrix)>, Constant{1}), was not
> > > provided and not given a value.Use the Theano flag
> > > exception_verbosity='high',for more information on this error.",
> > > <TensorType(int32, matrix)>)
> > >
> > >
> > > I have checked the model several times and I think I am passing the
> > inputs
> > > in the theano functions, so I am not sure where this error is coming
> > from.
> > > Any leads on this will be appreciated.
> > >
> > > --
> > >
> > > ---
> > > You received this message because you are subscribed to the Google
> > Groups "theano-users" group.
> > > To unsubscribe from this group and stop receiving emails from it, send
> > an email to [email protected] <javascript:>.
> > > For more options, visit https://groups.google.com/d/optout.
> >
> >
> > --
> > Pascal
> >
>
> --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "theano-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
--
Pascal
--
---
You received this message because you are subscribed to the Google Groups
"theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.