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.