I'm trying to create a dice_loss function in Tensorflow. I'm facing a trouble with tensorlfow. Executing the following code
import tensorflow as tf import tensorlayer as tl def conv3d(x, inChans, outChans, kernel_size, stride, padding): weights = weight_variable([kernel_size, kernel_size, kernel_size, inChans, outChans]) biases = bias_variable([outChans]) conv = tf.nn.conv3d(x, weights, strides=[1, stride, stride, stride, 1], padding=padding) return tf.nn.bias_add(conv, biases) def train(loss_val, var_list): optimizer = tf.train.AdamOptimizer(FLAGS.learning_rate) grads = optimizer.compute_gradients(loss_val, var_list=var_list) return optimizer.apply_gradients(grads) def main(argv=None): image = tf.placeholder(tf.float32, shape=[None, SLICE_SIZE, IMAGE_SIZE, IMAGE_SIZE, 1], name="input_image") annotation = tf.placeholder(tf.float32, shape=[None, SLICE_SIZE, IMAGE_SIZE, IMAGE_SIZE, 1], name="annotation") logits, pred_annotation = vnet.VNet(image) loss = 1 - tl.cost.dice_coe(output=pred_annotation, target=annotation, axis=[1,2,3,4]) trainable_var = tf.trainable_variables() train_op = train(loss, trainable_var) sess = tf.Session() ... ... def VNet(x): ... out = tf.nn.elu(BatchNorm3d(conv3d(x, inChans, 2, kernel_size=5, stride=1, padding="SAME"))) out = conv3d(out, 2, 2, kernel_size=1, stride=1, padding="SAME") annotation_pred = tf.to_float(tf.argmax(out, dimension=4, name='prediction')) return out, tf.expand_dims(annotation_pred, dim=4) I get the following error:
ValueError: No gradients provided for any variable: ...
Someone can help me?