0

私は tensorflow を使用して、4 つの隠れ層シグモイドでアクティブ化されたニューラル ネットワークを実装しています。コードは次のとおりです。

import tensorflow as tf
import numpy as np   
from sklearn import preprocessing
import pandas as pd

#importing and preprocessing data
def get_data():
    df = pd.read_csv('date_train.csv')
    date_train = df.as_matrix()
    X1 = date_train[:, :-1]
    Y_float = date_train[:, -1]
    Y = Y_float.astype(int)    
    #standardization
    X = preprocessing.scale(X1)
    N, D = X.shape
    K = len(set(Y)) #length of possible y values
    df_test = pd.read_csv('date_test.csv')
    X_test = df_test.as_matrix()
    df_ans = pd.read_csv('date_test_ans.csv')
    Y_ans = df_ans.as_matrix()
    Y_test = Y_ans[:,-1]
    return X, Y, N, D, K, X_test, Y_test

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

#model
def forward(tfX, W1, b1, W2, b2, W3, b3, W4, b4, W5, b5):
    l1 = tf.add(tf.matmul(tfX, W1), b1)
    l1 = tf.nn.sigmoid(l1)
    l2 = tf.add(tf.matmul(l1, W2), b2)
    l2 = tf.nn.sigmoid(l2)
    l3 = tf.add(tf.matmul(l2, W3), b3)
    l3 = tf.nn.sigmoid(l3)
    l4 = tf.add(tf.matmul(l3, W4), b4)
    l4 = tf.nn.sigmoid(l4)
    output = tf.matmul(l4, W5) + b5
    return output

X, Y, N, D, K, X_test, Y_test = get_data()
T = np.zeros((N,K))
for i in range(N):
    T[i,Y[i]] = 1

# params
h1 = 18
h2 = 18
h3 = 18
h4 = 18
learning_rate = 0.01
epochs = 100

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

W1 = init_weights([D,h1])
b1 = init_weights([h1])
W2 = init_weights([h1,h2])
b2 = init_weights([h2])
W3 = init_weights([h2,h3])
b3 = init_weights([h3])
W4 = init_weights([h3,h4])
b4 = init_weights([h4])
W5 = init_weights([h4,K])
b5 = init_weights([K])

#train
logits = forward(tfX, W1, b1, W2, b2, W3, b3, W4, b4, W5, b5)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=tfY, logits=logits))
train_op = tf.train.AdamOptimizer(learning_rate).minimize(cost)
predict_op = tf.argmax(logits, 1)
correct_prediction = tf.equal(tf.argmax(logits,1), tf.argmax(tfY,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

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

print(accuracy.eval(predict_op, feed_dict={tfX: X_test, tfY: Y_test}))

コードトレーニング部分は正常に実行されていますが、モデルを評価しようとすると、このエラーが発生します (チュートリアル以外で eval を使用するのはこれが初めてであることに注意してください):

TypeError: eval() got multiple values for argument 'feed_dict'

それが重要な場合は、これも tensorflow-gpu で実行します

4

1 に答える 1

2

これはインタラクティブなセッションではないため、セッション内で eval を使用する必要があります。

 print(accuracy.eval(predict_op, feed_dict={tfX: X_test, tfY: Y_test},session = sess))

または

with tf.Session() as sess:
   print(accuracy.eval(predict_op, feed_dict={tfX: X_test, tfY: Y_test}))

または、次のように、sess をインタラクティブ セッションとして宣言します。

sess = tf.InteractiveSession()

そして、現在のコードで使用しているように eval を使用します。

于 2017-05-26T13:14:47.047 に答える