12๊ฐ์ ์
๋ ฅ ์ ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ถ๋ ฅ ๋ฐ ๋ ์ด๋ธ์ 1 ๋๋ 0์
๋๋ค. tensorflow ์น ์ฌ์ดํธ์์ MNIST ์์ ๋ฅผ ๊ฒํ ํฉ๋๋ค.
๋ด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import tensorflow as tf
import numpy as np
def init_weights(shape):
return tf.Variable(tf.random_normal(shape, stddev=0.01))
def model(X, w):
return tf.matmul(X, w) # notice we use the same model as linear regression, this is because there is a baked in cost function which performs softmax and cross entropy
train_data1 = "./data/xx.csv"
test_data1 = "./data/xxx.csv"
train_label1 = "./data/xxl.csv"
test_label1 = "./data/xx.csv"
train_data = np.genfromtxt(train_data1, delimiter=',')
train_label = np.genfromtxt(train_label1, delimiter=',').astype(int)
test_data = np.genfromtxt(test_data1, delimiter=',')
test_label = np.genfromtxt(test_label1, delimiter=',').astype(int)
# Load datasets.
trX, trY, teX, teY = train_data,train_label, test_data, test_label
X = tf.placeholder("float", [None, 12]) # create symbolic variables
Y = tf.placeholder("float", [None, 2])
w = init_weights([12, 2])
py_x = model(X, w)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y)) # compute mean cross entropy (softmax is applied internally)
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost) # construct optimizer
predict_op = tf.argmax(py_x, 1) # at predict time, evaluate the argmax of the logistic regression
# Launch the graph in a session
with tf.Session() as sess:
# you need to initialize all variables
tf.initialize_all_variables().run()
for i in range(100):
#for (x, y) in zip(train_X, train_Y):
#sess.run(optimizer, feed_dict={X: trX, Y: trY})
for start, end in zip(range(0, len(trX), 128), range(128, len(trX)+1, 128)):
sess.run(train_op, feed_dict={X: trX[start:end], Y: trY[start:end]})
print(i, np.mean(np.argmax(teY, axis=1) ==
sess.run(predict_op, feed_dict={X: teX})))
ํ์ง๋ง ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Traceback (most recent call last):
File "LRexample.py", line 74, in <module>
sess.run(train_op, feed_dict={X: trX[start:end], Y: trY[start:end]})
ValueError: Cannot feed value of shape (128,) for Tensor u'Placeholder_1:0', which has shape '(?, 2)
์ด ์ค๋ฅ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๊น?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋จผ์ ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ์ต๋๋ค.
train_data = np.genfromtxt(train_data1, delimiter=',')
train_label = np.transpose(train_label1, delimiter=',')
test_data = np.genfromtxt(test_data1, delimiter=',')
test_label = np.transpose(test_label1, delimiter=',')
๊ทธ๋ฐ ๋ค์ trX, trY, teX, teY ๋ฐ์ดํฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํฉ๋๋ค.
# convert the data
trX, trY, teX, teY = train_data,train_label, test_data, test_label
temp = trY.shape
trY = trY.reshape(temp[0], 1)
trY = np.concatenate((1-trY, trY), axis=1)
temp = teY.shape
teY = teY.reshape(temp[0], 1)
teY = np.concatenate((1-teY, teY), axis=1)
๋ง์ง๋ง์ผ๋ก ์ธ์ ์์ ๊ทธ๋ํ ์์์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ์ต๋๋ค.
with tf.Session() as sess:
# you need to initialize all variables
tf.initialize_all_variables().run()
for i in range(100):
sess.run(train_op, feed_dict={X: trX, Y: trY})
print(i, np.mean(np.argmax(teY, axis=1) == sess.run(predict_op, feed_dict={X: teX})))
๊ทธ๊ฒ ๋ค์ผ.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๋จผ์ ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ trX, trY, teX, teY ๋ฐ์ดํฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ธ์ ์์ ๊ทธ๋ํ ์์์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ์ต๋๋ค.
๊ทธ๊ฒ ๋ค์ผ.