2017-04-30 12 views
1
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))に少し問題があります。それは言っていますTensorflowメソッドの問題

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の専門家ではありません。どのように私はそれを修正することができるアイデアを誰もがあります。それは論理の誤りではなく、むしろ私が推測する構造の誤りである。

答えて

0

エラーメッセージごとに、softmax ...関数の引数に名前を付ける必要があります。

だから、あなたが行を変更する必要があります。

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