Tensorflow方法问题

时间:2017-04-30 18:12:50

标签: python tensorflow

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

Nclass = 500
D = 2
M = 3
K = 3

X1 = np.random.randn(Nclass, D) + np.array([0, -2])
X2 = np.random.randn(Nclass, D) + np.array([2, 2])
X3 = np.random.randn(Nclass, D) + np.array([-2, 2])
X = np.vstack ([X1, X2, X3]).astype(np.float32)

Y = np.array([0]*Nclass + [1]*Nclass + [2]*Nclass)

plt.scatter(X[:,0], X[:,1], c=Y, s=100, alpha=0.5)
plt.show()

N = len(Y)

T = np.zeros((N, K))
for i in range(N):
    T[i, Y[i]] = 1

def init_weights(shape):
    return tf.Variable(tf.random_normal(shape, stddev=0.01))

def forward(X, W1, b1, W2, b2):
    Z = tf.nn.sigmoid(tf.matmul(X, W1) + b1)
    return tf.matmul(Z, W2) + b2

tfX = tf.placeholder(tf.float32, [None, D])
tfY = tf.placeholder(tf.float32, [None, K])

W1 = init_weights([D, M])
b1 = init_weights([M])
W2 = init_weights([M, K])
b2 = init_weights([K])

py_x = forward(tfX, W1, b1, W2, b2)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, T))

train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost)
predict_op = tf.argmax(py_x, 1)

sess = tf.Session()
inti = tf.initizalize_all_variables()

for i in range(1000):
    sess.run(train_op, feed_dict={tfX: X, tfY: T})
    pred = sess.run(predict_op, feed_dict={tfX: X, tfY: T})
    if i % 10 == 0:
        print(np.mean(Y == pred))

我在cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, T))行上有一点问题。这是说

Traceback (most recent call last):
  File "test.py", line 43, in <module>
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, T))
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/nn_ops.py", line 1607, in softmax_cross_entropy_with_logits
    labels, logits)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/nn_ops.py", line 1562, in _ensure_xent_args
    "named arguments (labels=..., logits=..., ...)" % name)
ValueError: Only call `softmax_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)

到目前为止,我还不是Tensorflow的专家。任何人都可以知道如何解决这个问题。这不是逻辑错误,而是我猜的结构错误。

1 个答案:

答案 0 :(得分:0)

根据错误消息,您需要将参数命名为 softmax ... 函数。

所以你应该将这一行改为:

tf.nn.softmax_cross_entropy_with_logits(labels=py_x, logits=T)