私は 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 で実行します