Tensorflow:逻辑回归到mnist

时间:2018-10-12 12:57:19

标签: python tensorflow

我尝试将逻辑回归用于mnist数据集,但是实现方面存在一些问题

from sklearn.datasets import load_digits
from sklearn.metrics import roc_auc_score

s = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))

mnist = load_digits(2)

X,y = mnist.data, mnist.target

# inputs and shareds
weights = tf.Variable(np.zeros((64, 1), dtype='float32'))
input_X = tf.placeholder(tf.float32, shape=(None, 64))
input_y = tf.placeholder(tf.float32, shape=(None, 1))

predicted_y = tf.add(tf.matmul(input_X, weights), input_y)
loss = tf.losses.log_loss(input_y, predicted_y)

optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-2).minimize(loss)
train_function = s.run(optimizer, feed_dict={input_X: X, input_y: y.reshape(-1, 1)})
predict_function = s.run(predicted_y, feed_dict={input_X: X})

X_train, X_test, y_train, y_test = train_test_split(X, y)

for i in range(5):
    s.run(optimizer)
    loss_i = s.run(loss, feed_dict={input_X: X_test, input_y: y_test})

    print("loss at iter %i:%.4f" % (i, loss_i))

    print("train auc:",roc_auc_score(y_train, predict_function(X_train)))
    print("test auc:",roc_auc_score(y_test, predict_function(X_test)))


print ("resulting weights:")
plt.imshow(weights.eval().reshape([8,8]))
plt.colorbar()

当我尝试运行train_prediction时出现问题。它返回

FailedPreconditionError: Attempting to use uninitialized value Variable_16
 [[Node: Variable_16/read = Identity[T=DT_FLOAT, _class=["loc:@Variable_16"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](Variable_16)]]

我尝试更改输入的形状,但我不明白,这是怎么回事。

1 个答案:

答案 0 :(得分:0)

TensorFlow文档明确指出:

  

启动图形时,必须先明确初始化变量,然后才能运行使用其值的Ops。您可以通过运行变量的初始值设定项op,从保存文件还原变量或仅运行为变量分配值的assign Op来初始化变量。实际上,变量初始值设定项op只是将变量的初始值分配给变量本身的赋值Op。

因此,在打开TF会话之后,您必须运行Initializer Op之一来初始化weight变量。

我建议您使用tf.get_variable()定义新变量,该变量创建一个新变量或检索给定名称的现有变量。在其参数列表中,可以传递tf.initializer,但如果不这样做,它将加载默认的初始化程序。