You haven't used w or b in the graph to compute the cost function. You need
to add something like
logits = w.dot(x) + b.dimshuffle('x', 0')
logitsdev = logits - logits.max(1, keepdims=True)
you probably also want b to be of length 257 rather than a scalar.
On Monday, February 13, 2017 at 9:06:57 AM UTC-8, Dimitris Marm wrote:
>
>
> Hello,
>
> I am new to Theano and I have seen that actually is not straight-forward
> how to apply semantic segmentation over multiclass and multilabel labels.
>
> Particularly the problem I seen many people face is regarding the
> logistic-regression layer in the end of the network. For tackling this
> problem I constructed a single
>
> *logistic-regression layer for 2d labels.*I guess my code still has some
> bug but I am unable to find it !
>
>
> The code
>
> =========================
>
> import numpy as np
> import random
> from theano import shared
> from theano import tensor as T
> import theano
>
> #import pdb; pdb.set_trace()
>
> theano.config.optimizer='fast_compile'
> theano.config.exception_verbosity='high'
> theano.config.compute_test_value = 'warn'
>
> features = []
> labels = []
>
>
> # ======================= theano =========================
>
> for i in range(10):
>
> if i == 0:
>
> features = np.array([random.randint(0,256) for t in range(0,128*
> 128)]).reshape((1, 1, 128,128))
> labels = np.array([random.randint(0,256) for t in range(0,128*128
> )]).reshape((1, 1, 128,128))
>
> else:
>
> features= np.append(features, np.array([random.randint(0,256) for
> t in range(0,128*128)]).reshape((1, 1, 128,128)),axis= 0)
>
> labels= np.append(features, np.array([random.randint(0,256) for t
> in range(0,128*128)]).reshape((1, 1, 128,128)),axis= 0)
>
> # Loss
>
> def train_lr(x_train, y_train, regu_coeff = 0.00015, step = 0.0000001):
>
> x = T.matrix("x")
> y = T.matrix("y")
>
> w = theano.shared(
> value = np.random.randn(128*128,257),
> name='w',
> borrow=True
> )
>
> b = theano.shared(0., name='b')
>
> # 2d-softmax implementation
> xdev = x - x.max(1, keepdims=True)
> log_pred = xdev - T.log(T.sum(T.exp(xdev), axis=1, keepdims=True))
>
> cost = T.mean(-T.sum(y * log_pred, axis=1)) # cross entropy
>
> gw, gb = T.grad(cost, [w, b]) # gradient
>
> train = theano.function(
> inputs=[x,y],
> outputs=[log_pred],
> updates=((w, w - step * gw), (b, b - step * gb)))
>
> for i in range(100):
> train(x_train,y_train)
>
> return w, b
>
> pp = train_lr(features, labels)
>
>
>
> The error I am getting
>
> ===================================
>
>
>
>
>
>
>
> *theano.gradient.DisconnectedInputError: grad method was asked to compute
> the gradient with respect to a variable that is not part of the
> computational graph of the cost, or is used only by a non-differentiable
> operator: w~~~~~*I really do not know how to proceed as I don't
> understand why the w (weights) are not differentiable.
>
> I would appreciate any hints
>
> Regards
>
--
---
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.