我正在使用代码来研究MLP和tensorflow。
它的功能是readfile,构建参数,训练,测试,制作AOC
import tensorflow as tf
##trn.txt start
num_lines_trn = sum(1 for line in open('./trn.txt'))
bat_x=[]
bat_y=[]
import os
statinfo = os.stat("./trn.txt")
f = open("./trn.txt", 'r')
for i in range(num_lines_trn):
temp_x=[]
input_iter=0;
line = f.readline()
line = line.strip()
for number in line.split():
if (input_iter==13):
bat_x.insert(i,temp_x)
#bat_y[i][float(number)]=1
if(float(number)==0):
bat_y.insert(i,[1,0])
else:
bat_y.insert(i,[0,1])
else :
temp_x.insert(input_iter,float(number))
input_iter=input_iter+1
f.close()
##trn.txt end
##tst.txt start
num_lines_tst = sum(1 for line in open('./tst.txt'))
tst_x=[]
tst_y=[]
import os
statinfo = os.stat("./tst.txt")
f = open("./tst.txt", 'r')
for i in range(num_lines_tst):
temp_x=[]
input_iter=0;
line = f.readline()
line = line.strip()
for number in line.split():
if (input_iter==13):
tst_x.insert(i,temp_x)
if(float(number)==0):
tst_y.insert(i,[1,0])
else:
tst_y.insert(i,[0,1])
else :
temp_x.insert(input_iter,float(number))
input_iter=input_iter+1
f.close()
##tst.txt end
# Parameters
learning_rate = 0.001
training_epochs = 1
batch_size = 100
display_step = 1
n_hidden_1 = 512 # 1st layer number of features
n_hidden_2 = 512 # 2nd layer number of features
n_input=13
n_classes=2
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
weights = {
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1])),
'b2': tf.Variable(tf.random_normal([n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_classes]))
}
# Construct model
pred = multilayer_perceptron(x, weights, biases)
# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
# Initializing the variables
label_tensor=tf.Variable(tst_y, name="label")
init = tf.initialize_all_variables()
num_lines_tst = sum(1 for line in open('./tst.txt'))
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
avg_cost = 0.
total_batch = int(num_lines_trn/batch_size)
# Loop over all batches
for i in range(total_batch):
batch_x, batch_y = bat_x[i*batch_size:(i+1)*batch_size],bat_y[i*batch_size:(i+1)*batch_size]#mnist.train.next_batch(batch_size)
# Run optimization op (backprop) and cost op (to get loss value)
_, c = sess.run([optimizer, cost], feed_dict={x: batch_x,
y: batch_y})
# Compute average loss
avg_cost += c / total_batch
# Display logs per epoch step
if epoch % display_step == 0:
print ("Epoch:", '%04d' % (epoch+1), "cost=", \
"{:.9f}".format(avg_cost))
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
pred_array=sess.run(pred, feed_dict={x: tst_x})
pred_tensor=tf.Variable(pred_array, name="pred")
print(sess.run(accuracy, feed_dict={x: tst_x, y: tst_y}))
auc = tf.contrib.metrics.streaming_auc(pred_tensor,label_tensor)
init2 = tf.initialize_local_variables()
sess.run(init2)
train_auc = sess.run(auc)
#print(train_auc)
#recall,update_op = tf.contrib.metrics.streaming_recall(pred_tensor,label_tensor)
#print(sess.run(recall))
但此位置会出错
train_auc = sess.run(auc)
FailedPreconditionError:尝试使用未初始化的值pred_49
如何避免此错误?
答案 0 :(得分:1)
您的代码需要文件,无法运行。这是一个关于如何运行AUC的小例子:
import tensorflow as tf
import numpy as np
# Data examples
tst_y = [1, 1, 0]
tst_x = [[1, 1], [1, 0], [0, 0]]
# Simple linear neural network (Ax+b=y)
x = tf.placeholder('float32', [None, 2], name='state_tensor')
m = tf.get_variable('Matrix', [x.get_shape().as_list()[1], 1], tf.float32, tf.contrib.layers.xavier_initializer(uniform=False))
b = tf.get_variable('bias', [1], initializer=tf.contrib.layers.xavier_initializer(uniform=False))
pred = tf.nn.bias_add(tf.matmul(x, m), b)
# The ops to calculate AUC
label_tensor = tf.Variable(tst_y, name="label")
predictions2 = tf.placeholder('float32', [None, 1], name='predictions2')
auc, update_op = tf.contrib.metrics.streaming_auc(predictions2, label_tensor)
# In a session
with tf.Session() as sess:
# Initialize all and local variables
tf.initialize_all_variables().run()
tf.initialize_local_variables().run()
# Run the prediction and AUC ops
nn_predictions = sess.run(pred, feed_dict={x: tst_x})
train_auc = sess.run(update_op, feed_dict={predictions2: nn_predictions})
# Tensor and current value
print(auc, train_auc)
将此示例改编为您的代码并报告您的结果