Why does using cross_entropy code got value error?

Viewed 24

I have the following issue when running the code below:

learning_rate = 0.01
training_epochs = 100
display_step = 10

n_input = X_input.shape[1]
n_hidden_1 = 48 # 1st layer num features
n_hidden_2 = 32 # 2nd layer num features
n_hidden_3 = 24 # 3rd layer num features
n_hidden_4 = 16 # 4rd layer num features

X = tf.placeholder('float', [None, n_input])

weights = {
    'encoder_h1': tf.Variable(tf.random_normal([n_input, n_hidden_1], seed = ran)),
    ...
    'encoder_h4': tf.Variable(tf.random_normal([n_hidden_3, n_hidden_4], seed = ran)),
    'decoder_h1': tf.Variable(tf.random_normal([n_hidden_4, n_hidden_3], seed = ran)),
    ...
    'decoder_h4': tf.Variable(tf.random_normal([n_hidden_1, n_input], seed = ran))
}

biases = {
    'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1], seed = ran)),
    ...
    'encoder_b4': tf.Variable(tf.random_normal([n_hidden_4], seed = ran)),
    'decoder_b1': tf.Variable(tf.random_normal([n_hidden_3], seed = ran)),
    ...
    'decoder_b4': tf.Variable(tf.random_normal([n_input], seed = ran)),
}


def encoder(x):
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),
        biases['encoder_b1']))
    ...
    layer_4 = tf.nn.sigmoid(tf.add(tf.matmul(layer_3, weights['encoder_h4']),
        biases['encoder_b4']))

    return layer_1, layer_2, layer_3, layer_4

def decoder(x):
    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),
        biases['decoder_b1']))
    ...
    layer_4 = tf.nn.sigmoid(tf.add(tf.matmul(layer_3, weights['decoder_h4']),
        biases['decoder_b4']))

    return layer_4

encoder_op_1, encoder_op_2, encoder_op_3, encoder_op = encoder(X)
decoder_op = decoder(encoder_op)

y_pred = decoder_op
y_true = X

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_true, labels=y_pred))
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    # Training cycle
    for epoch in range(training_epochs):
        _, c = sess.run([optimizer, cost], feed_dict = {X: X_input})

        if epoch % display_step == 0:
            print('Epoch:', '%04d' % (epoch + 1),
                'cost=', '{:.9f}'.format(c))

    print('Optimization Finished!')

    x_features = sess.run(encoder_op, feed_dict = {X: X_input})
    print(x_features)

x_features = np.concatenate((X_input, x_features), axis = 1)

X_train, X_test, y_train, y_test = train_test_split(x_features, y_input, test_size = 0.2, random_state = ran)

n_train = X_train.shape[0]
n_test = X_test.shape[0]

learning_rate = 1e-02
beta1 = 0.9999
beta2 = 0.99
epsilon = 1e-08
training_epoch = 400
display_step = 5

uniform_number = 12
n_hidden_1 = 12
n_hidden_2 = 11
n_hidden_3 = 10
n_hidden_4 = 9
n_hidden_5 = 8
n_hidden_6 = 7
n_hidden_7 = 6
n_hidden_8 = 5
n_input = X_train.shape[1]
n_output = 1

x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_output])
keep_prob = tf.placeholder("float")
rate = 1-keep_prob

weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1], seed = ran)),
    ...
    'h8': tf.Variable(tf.random_normal([n_hidden_7, n_hidden_8], seed = ran)),
    'out': tf.Variable(tf.random_normal([n_hidden_8, n_output], seed = ran))
}

biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1], seed = ran)),
     ...
    'b8': tf.Variable(tf.random_normal([n_hidden_8], seed = ran)),
    'out': tf.Variable(tf.random_normal([n_output], seed = ran))
}

def multilayer_perceptron(x, weights, biases):
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1) # 
    layer_1 = tf.nn.dropout(layer_1, rate)
    ...
    layer_8 = tf.add(tf.matmul(layer_7, weights['h8']), biases['b8'])
    layer_8 = tf.nn.elu(layer_8)
    layer_8 = tf.nn.dropout(layer_8, rate)
    out_layer = tf.matmul(layer_8, weights['out']) + biases['out']
    return out_layer

pred = multilayer_perceptron(x, weights, biases)

correct_prediction = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))
test_accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))

optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(accuracy)

tf.summary.scalar(SCALAR_NAME, accuracy)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    feed_dict = {x: X_train, y: y_train, rate: 1.0}
    feed_test_dict = {x: X_test, y: y_test, rate: 1.0}
    summary = tf.summary.merge_all()
    summary_writer = tf.summary.FileWriter(TRAIN_DIR, sess.graph)

    for epoch in range(training_epoch):
        _, acc, summary_str = sess.run([optimizer, accuracy, summary], feed_dict = feed_dict)
        test_acc = sess.run(test_accuracy, feed_dict = feed_test_dict)
        summary_writer.add_summary(summary_str, epoch)

        if epoch % display_step == 0:
            print("Epoch: ", "%04d" % (epoch + 1, ), "train acc = ", \
                "{:.9f}".format(acc), "test acc = ", \
                "{:.9f}".format(test_acc))

    print("Test accuracy = ", "{:.9f}".format(test_accuracy.eval(feed_dict = feed_test_dict)))

print('Run time:', time() - start_time, 'sec')

Whenever I run this code I have the following error:

ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables ["<tf.Variable 'Variable:0' shape=(55, 48) dtype=float32>", "<tf.Variable 'Variable_1:0' shape=(48, 32) dtype=float32>", "<tf.Variable 'Variable_2:0' shape=(32, 24) dtype=float32>", "<tf.Variable 'Variable_3:0' shape=(24, 16) dtype=float32>", "<tf.Variable 'Variable_4:0' shape=(16, 24) dtype=float32>", "<tf.Variable 'Variable_5:0' shape=(24, 32) dtype=float32>", "<tf.Variable 'Variable_6:0' shape=(32, 48) dtype=float32>"

What is wrong with my code? Is it because the code

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_true, labels=y_pred))

I saved some code to avoid it being too verbose. It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.

0 Answers
Related