【问题标题】:Tensorflow: logistic regression to mnistTensorflow:逻辑回归到 mnist
【发布时间】:2018-10-12 12:57:19
【问题描述】:

我尝试使用逻辑回归来 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)]]

我尝试改变输入的形状,但我不明白,出了什么问题。

【问题讨论】:

  • 什么是s?这不是 MVCE
  • @mad_,对不起,s = tf.InteractiveSession(config=tf.ConfigProto(gpu_options=gpu_options))

标签: python tensorflow


【解决方案1】:

TensorFlow 文档明确表示:

启动图表时,必须明确初始化变量,然后才能运行使用其值的操作。您可以通过运行其初始化程序操作、从保存文件恢复变量或简单地运行为变量分配值的分配操作来初始化变量。实际上,变量初始化器 op 只是一个 assign Op,将变量的初始值赋给变量本身。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2019-11-16
    相关资源
    最近更新 更多