Professional Documents
Culture Documents
-tensorflow inport 하기
>>> h=tf.constant("Hello")
>>> hw=h+w
>>> print(hw)
>>> sess=tf.Session()
>>> print(sess.run(hw))
b’Hello World’
-연산그래프
∙ 연산 그래프. 의존성
∙ 의존 관계를 파악하여 연산을 분산시키는 장점이 생김
>>> b=tf.constant(2)
>>> c=tf.constant(3)
>>> d=tf.multiply(a,b)
>>> e=tf.add(c,b)
>>> f=tf.subtract(d,e)
d=a*b
e=c+b
f=d-e
∙ 축약형 연산자
>>> print("out={}".format(outs))
out=5
>>> g=tf.Graph()
>>> print(tf.get_default_graph()) #기본 그래프가 무엇인지 알려줌
>>> print(g)
>>> a=tf.constant(3)
False
True
>>> outs=sess.run([a,b,c,d,e,f])
*텐서
∙ 노드: 연산 객체, 변: 텐서 객체
>>> c=tf.constant(4.0)
>>> print(c)
∙ 텐서 객체는 name, shape, dtype 같은 속성이 있음, 속성을 지정하지 않으면 자동으로 설정됨
tf.cast()를 사용해 형 변환
>>> print(x)
>>> print(x.dtype)
<dtype: 'float32'>
>>> print(x.dtype)
<dtype: 'int32'>
∙ 텐서 데이터 타입
∙ 텐서: A ijklm… 형태 배열
∙ 텐서의 형태 찾기 (get_shape() 메서드)
>>> c=tf.constant([[1,2,3],
[4,5,6]])
∙ 여러 초기화 함수들
>>> sess=tf.InteractiveSession()
>>> print(c.eval())
>>> A=tf.constant([[1,2],[3,4]])
>>> print(A.get_shape())
(2, 2)
>>> x=tf.constant([3,1])
>>> print(x.get_shape())
(2, )
>>> print(x.get_shape())
(2, 1)
>>> sess=tf.InteractiveSession()
>>> print("B={}".format(B.eval()))
B=[[ 5]
[13]]
>>> sess.close()
∙ 전치 행렬 만들기 tf.transpose()
>>> A=tf.constant(3,name='alpha')
>>> B=tf.constant(4)
>>> print(A.name,B.name)
alpha:0 Const_7:0
>>> A=tf.constant(4)
>>> B=tf.constant(5)
>>> print(C.name)
Add_1/add:0
*변수, 플레이스 홀더
>>> init=tf.global_variables_initializer()
>>> post_var=sess.run(var)
post run:
[[-1.8759531 -0.2734798 0.37946957 0.22723174 0.11488523]]
>>> W_data=np.ones((10,2))
>>> wx=tf.matmul(W,x)
>>> sess=tf.Session()
#print("{}".format(outs))
[[2.]
[2.]
[2.]
[2.]
[2.]
[2.]
[2.]
[2.]
[2.]
[2.]]
>>> sess.close()
*선형회귀
∙ x, y, W, b는 텐서 형태를 갖는다
∙ cost 함수 만들어 보기
import numpy as np
return np.mean((y_pred-y_data)**2)
∙ np. mean
>>> y_pred=W*x_data+b
#print(cost(10,10,10,10))
10000.0
>>> print(cost(W,b,X,Y))
비용함수를 W와 b의 함수로 간주
∙ 파이썬 코드 만들어보기
W-=2*alpha*np.mean((W*x_data+b-y_data)*x_data)
b-=2*alpha*np.mean(W*x_data*b-y_data)
return W,b
∙ 실행 부분
W, b=grad_desc(W, b, alpha, X, Y)
if i%100==0:
co=cost(W,b,X,Y)
def cost(W,b,x_data,y_data):
y_pred=W*x_data+b
return np.mean((y_pred-y_data)**2)
def grad_desc(W,b,alpha,x_data,y_data):
W-=2*alpha*np.mean((W*x_data+b-y_data)*x_data)
b-=2*alpha*np.mean(W*x_data+b-y_data)
return W,b
X=rand.randn(1000)
W0=2.3
b0=-2.0
Y=W0*X+b0+0.01*rand.randn(1000)
for i in range(1,1001):
W0,b0=grad_desc(W0,b0,alpha,X,Y)
if i%100==0:
co=cost(W0,b0,X,Y)
*여러 개의 독립 변수
∙ 파이썬 코드
import numpy as np
rng=np.random
def loss(W,b,X,Y):
Yhat=np.matmul(X,W)+b
return np.mean((Yhat-Y)**2)
def grad_desc(W,b,alpha,X,Y):
samples=X.shape[0]
Ydiff=np.matmul(X,W)+b-Y
W-=2*alpha*np.matmul(X.T,Ydiff)/samples
b-=2*alpha*np.mean(Ydiff)
return W,b
X=np.array([1,2,3],dtype=np.float32).reshape((-1,1))
Y=np.array([3,4,5],dtype=np.float32).reshape((-1,1))
#여기까지가 데이터
n_in=1
n_out=1
W=rng.randn(n_in,n_out)
b=rng.randn()
for i in range(1,1001):
W,b=grad_desc(W,b,alpha,X,Y)
if i%100==0 :
print(W,b,loss(W,b,X,Y))
-이진 분류란
-로지스틱 분류: 이론
Yhat>0: p>1/2
Yhat<0: p<1/2
<xor 문제>
X=np.array([[0,0],[1,0],[0,1],[1,1]],dtype=np.float32)
and_Y=np.array([[0],[0],[0],[1]],dtype=np.float32)
or_Y=np.array([[0],[1],[1],[1]],dtype=np.float32)
xor_Y=np.array([[0],[1],[1],[0],dtype=np.float32])
xor 문제 해결하기
W1X1+W2X2+W3X1X2+b=0
import numpy as np
rng=np.random
def sig(X):
return 1./(1.+np.exp(-X))
def loss(W,b,X,Y):
Yhat=np.matmul(X,W)+b
P=sig(Yhat)
entropy=-Y*np.log(P)-(1-Y)*np.log(1-P)
return np.mean(entropy)
def grad_desc(W,b,alpha,X,Y):
samples=X.shape[0]
Yhat=np.matmul(X,W)+b
diff=sig(Yhat)-Y
W-=alpha*np.matmul(X.T,diff)/samples
b-=alpha*np.mean(diff)
return W,b
def accuracy(Y,Yhat):
diff=np.round(sig(Yhat))-Y
return np.mean(1.-diff**2)
X=np.array([[0,0],[0,1],[1,0],[1,1]],dtype=np.float32)
Y=np.array([[0],[1],[1],[1]],dtype=np.float32)
#여기까지가 데이터
n_in=2
n_out=1
W=rng.randn(n_in,n_out)
b=rng.randn()
alpha=0.1 #0.1, 0.5, 1
for i in range(1,1001):
W,b=grad_desc(W,b,alpha,X,Y)
if i%100==0 :
Yhat=np.matmul(X,W)+b
print(W,b,accuracy(Y,Yhat))
<텐서플로로 구현하기>
*선형회귀
데이터를 넣을 리스트 설정
>>> b=tf.Variable(tf.random_normal([n_output]))
가설 설정
>>> Yhat=tf.matmul(X,W)+b
비용함수 정의
>>> cost=tf.reduce_mean(tf.square(Yhat-Y))
#cost=tf.reduce_mean((Yhat-Y)**2) 와 동일한 결과
>>> optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.1)
실행하기
>>> sess=tf.Session()
>>> if j%50==0:
''
I Elm
m=10000
n_input=2#n=3인예
n_output=1#종속변수가 1개인경우
x_train=rand.randn(m,n_input)
W0=rand.randn(n_input,n_output)
b0=2
y_train=np.matmul(x_train,W0)+b0
X=tf.placeholder(tf.float32,shape=[None,n_input])
Y=tf.placeholder(tf.float32,shape=[None,n_output])
✓
W=tf.Variable(tf.random_normal([n_input,n_output]))
b=tf.Variable(tf.random_normal([n_output]))
: Yhat=tf.matmul(X,W)+b
cost=tf.reduce_mean(tf.square(Yhat-Y))
optimizer =tf.train.GradientDescentOptimizer(learning_rate=0.1)
train=optimizer.minimize(cost)
sess=tf.Session()
sess.run(tf.global_variables_initializer()) #변수초기화!
for j inrange(1,1001):
sess.run(train,feed_dict={X:x_train,Y:y_train})
if j%500==0:
print(sess.run([W,b,cost],{X:x_train,Y:y_train}))
sess.close()
print(W0,b0)
*이진분류
>>> n_input=3
>>> n_output=1
>>> Yhat=tf.matmul(X,W)+b
>>> htpothesis=tf.sigmoid(Yhat)
#정밀도 계산
>>> fail_rate=tf.reduce_mean((tf.round(hypothesis)-Y)**2)
reduce_mean(x,1)은 행 단위로 평균
cost=tf.reduce_mean(-Y*tf.log(hypothesis))-(1.-Y)*tf.log(1.-hypothesis))
tf.nn.sigmoid_cross_entropy_with_logits(labels=, logits=)
x_train=np.array([[0,0],[1,0],[0,1],[1,1]])
y_train=np.array([[0],[1],[1],[0]])
Y = tf.placeholder(tf.float32,[None,1])
X1 = tf.placeholder(tf.float32,[None,2])
W1 = tf.Variable(tf.truncated_normal([2,5]))
b1 = tf.Variable(tf.truncated_normal([5]))
Y1 = tf.matmul(X1,W1)+b1
X2 = tf.sigmoid(Y1)
W2 = tf.Variable(tf.truncated_normal([5,1]))
b2 = tf.Variable(tf.truncated_normal([1]))
Yhat=tf.matmul(X2,W2)+b2
hypothesis=tf.sigmoid(Yhat)
cost=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=Y,logits=Yhat))
train=tf.train.GradientDescentOptimizer(1).minimize(cost)
feed_dict={X1:x_train,Y:y_train}
accuracy= 1. - tf.reduce_mean((tf.round(hypothesis)-Y)**2)
sess.run(tf.global_variables_initializer()) #변수초기화!
for j inrange(1,101):
sess.run(train,feed_dict)
if j%5==0:
print(sess.run([W1,b1,accuracy],feed_dict))
*소프트맥스 분류: 이론
분류할 항목이 여러 개 있는 경우 해당
이를 행렬을 이용하여 한 번에 처리
샘플의 수: Nsample
X, Y, W, b의 형태
W=tf.Variable(tf.random_normal([n_input, n_output]))
b=tf.Variable(tf.random_normal([n_output]))
<tensorflow softmax>
n_input=2
n_output=3
Nsample=10000
# 가상데이터만들기
x_train=rand.randn(Nsample,n_input)
b0=np.array([-1,0.5,0]) # 1X3
y_argmax=np.argmax(prob,axis=1)
y_train=np.zeros((Nsample,n_output))
for i inrange(Nsample):
np.put(y_train[i],y_argmax[i],1)
#Graph construction
X = tf.placeholder(tf.float32,shape=(None,n_input))
Y = tf.placeholder(tf.float32,shape=(None,n_output))
W=tf.Variable(tf.zeros((n_input,n_output)))
b=tf.Variable(tf.zeros((1,n_output)))
Y_hat=tf.matmul(X,W)+b
hypothesis=tf.nn.softmax(Y_hat)
check=tf.equal(tf.argmax(hypothesis,1),tf.argmax(Y,1))
accuracy=tf.reduce_mean(tf.cast(check,dtype=tf.float32))
cost=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y,logits=Y_hat))
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)
feed_dict={X:x_train,Y:y_train}
sess.run(tf.global_variables_initializer())
print(sess.run([W,b,cost],feed_dict))
for j inrange(1,10001):
sess.run(train,feed_dict)
if j%1000==0: W_val,b_val,loss_val,a=sess.run([W,b,cost,accuracy],feed_dict)
print("no of
iteration={:>4},W={},b={},cost={:>.6e},accuracy={:>.6e}".format( j,W_val,b_val,loss_val,a))
with np.load(“mnist.npz”) as A:
x_train=A[“x_train”]
x_test=A[“x_test”]
y_train=A[“y_train”]
y_test=A[“y_test”]
28x28=728개의 input data
import numpy as np
print(b)
b=np.load("kor.npy")
print(b)
ndarray에 특별한 이름을 부여하지 않으면 자동으로 arr_0, arr_1의 순서로 이름이 생성됨
b.close()
a1=np.arange(10)
a2 = np.linspace(1,2,5)
np.savez("test2",a1,a2)
b=np.load("test2.npz")
print(b)
ar1=b["arr_0"]
ar2=b["arr_1"]
print(ar1,ar2)
print(ar1,ar2)
a=np.zeros((10,3))
np.savetxt("text1.txt",a,delimiter=',')
c=np.loadtxt("text1.txt",delimiter=',')
#구분자가 있는 파일 읽어오기.
print(c)
<mnist_softmax>
import tensorflow as tf
import numpy as np
rng=np.random
with np.load("mnist.npz") as A:
x_train=A["x_train"].reshape((-1,28*28)).astype(np.float32)/255.
y1=A["y_train"]
x_test=A["x_test"].reshape((-1,28*28)).astype(np.float32)/255.
y2=A["y_test"]
len1=y1.shape[0]
len2=y2.shape[0]
y_train=np.zeros((len1,10),dtype=np.float32)
y_test=np.zeros((len2,10),dtype=np.float32)
for i in range(len1):
y_train[i,y1[i]]=1
for i in range(len2):
y_test[i,y2[i]]=1
그래프 구성하기
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.random_normal([10]))
hypothesis=tf.nn.softmax(Yhat)
correct=tf.equal(tf.argmax(hypothesis,1),tf.argmax(Y,1))
accuracy=tf.reduce_mean(tf.cast(correct,tf.float32))
train=tf.train.GradientDescentOptimizer(0.5).minimize(cost)
training_epochs = 15
batch_size = 100
sess=tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(total_batch):
batch_x = x_train[batch_size*i:batch_size*(i+1),:]
batch_y = y_train[batch_size*i:batch_size*(i+1),:]
sess.run(train,{X:batch_x,Y:batch_y})
print(sess.run(accuracy,{X:x_train,Y:y_train}))
%matplotlib inline
for i in range(20):
r = rng.randint(0, len2)
plt.show()
*CNN
import tensorflow as tf
import numpy as np
%matplotlib inline
rng=np.random
with np.load("mnist.npz") as A:
x_train=A["x_train"].reshape((-1,28,28,1)).astype(np.float32)/255.
y1=A["y_train"]
x_test=A["x_test"].reshape((-1,28,28,1)).astype(np.float32)/255.
y2=A["y_test"]
len1=y1.shape[0]
len2=y2.shape[0]
y_train=np.zeros((len1,10),dtype=np.float32)
y_test=np.zeros((len2,10),dtype=np.float32)
for i in range(len1):
y_train[i,y1[i]]=1
for i in range(len2):
y_test[i,y2[i]]=1
tf.set_random_seed(100)
L1 = tf.nn.relu(L1)
L2 = tf.nn.relu(L2)
'''
'''
W3 = tf.Variable(tf.truncated_normal([7*7*64,10],stddev=0.01))
b = tf.Variable(tf.random_normal([10]))
correct=tf.equal(tf.argmax(Yhat,1),tf.argmax(Y,1))
accuracy=tf.reduce_mean(tf.cast(correct,tf.float32))
training_epochs = 10
batch_size = 100
sess=tf.Session()
sess.run(tf.global_variables_initializer())
for i in range(total_batch):
batch_x = x_train[batch_size*i:batch_size*(i+1),:]
batch_y = y_train[batch_size*i:batch_size*(i+1),:]
sess.run(train,{X:batch_x,Y:batch_y})
trc,tra=sess.run([cost,accuracy],{X:x_train,Y:y_train})
print("epoch =",epoch+1)
tec,tea=sess.run([cost,accuracy],{X:x_test,Y:y_test})
com=sess.run(correct,feed_dict={X:x_test,Y:y_test})
i=1
for r in range(10000):
if com[r]==False:
t_label=sess.run(tf.argmax(y_test[r:r+1], 1))
print("Label=[{}]\nPrediction=[{}]".format(t_label[0],t_pre[0]))
i+=1
plt.imshow(x_test[r:r + 1].reshape(28, 28), cmap='gray', interpolation='nearest')
plt.show()
if i>20:
break
sess.close()