딥러닝의 기본 개념과, 문제, 그리고 해결


개요(Abstract)
아래의 내용은 hunkim님의 모두를 위한 머신러닝/딥러닝 강의에서 tensorFlow 사용 예제를 R로 변경한 내용이다.
hunkim님의 강좌 주소는 http://hunkim.github.io/ml/ 이다.

아래의 내용은 ML의 실용과 몇가지 팁 수업에 있는 python 코드를 R로 변경한 것이다.
소스는 lab-08-tensor_manipulation.ipynb 이다.
python의 numpy 라이브러를 R에서 제공하지 않는다. 그렇지만 R과 파이썬 연동을 할 수 있다는 것을 보여 준다.
아래의 내용은 tensorFlow 에서 데이터 조작 방법을 보여준다.
library(tensorflow)

sess = tf$InteractiveSession()

# Simple Array
print("============= Simple Array ===============")
t = c(0., 1., 2., 3., 4., 5., 6.)
# print(t.ndim) # rank
# print(t.shape) # shape
# print(t[0], t[1], t[-1])
# print(t[2:5], t[4:-1])
# print(t[:2], t[3:])
(t)
length(t)
t[1]; t[2]; t[-1]; t[-(2:3)] # R에서는 -는 제외


# 2D Array
print("============= 2D Array ===============")
t = rbind(c(1., 2., 3.), c(4., 5., 6.), c(7., 8., 9.), c(10., 11., 12.))
(t)
dim(t) # shape
length(dim(t)) # rank


# Shape, Rank, Axis
print("============= Shape, Rank, Axis ===============")
t = tf$constant(c(1,2,3,4))
t$eval()

#R matrix
t = tf$constant(rbind(c(1,2), c(3,4)) )
t$eval()

t = tf$constant(array(1:24,dim=c(4, 3, 2)))
t$eval()

array(c(3., 3.), dim = c(1, 2))
array(c(2., 2.), dim = c(2, 1))

# Matmul VS multiply
print("============= Matmul VS multiply ===============")
matrix1 = tf$constant(array(c(3., 3.), dim = c(1, 2)))
matrix2 = tf$constant(array(c(2., 2.), dim = c(2, 1)))
sess$run(tf$matmul(matrix1, matrix2))


# Watch out broadcasting
print("n============= Watch out broadcasting ===============")
sess$run(matrix1+matrix2)
sess$run(matrix1 * matrix2)


# Random values for variable initializations
print("============= Random values for variable initializations ===============")
sess$run( tf$random_normal(list(3L)) )
sess$run( tf$random_uniform(list(2L)) )
sess$run( tf$random_uniform(list(3L, 2L)) )


# Reduce Mean/Sum
print("============= Reduce Mean/Sum ===============")

sess$run( tf$reduce_mean(matrix(c(1, 2), nrow = 1), axis=0L))
sess$run( tf$reduce_mean(matrix(c(1, 2), nrow = 1), axis=1L))

x = matrix(c(1., 2., 3., 4.), nrow = 2, byrow = T)
(x)

sess$run(tf$reduce_mean(x))
sess$run(tf$reduce_mean(x, axis=0L))
sess$run(tf$reduce_mean(x, axis=1L))
sess$run(tf$reduce_mean(x, axis=-1L))

sess$run(tf$reduce_sum(x))
sess$run(tf$reduce_sum(x, axis=0L))
sess$run(tf$reduce_sum(x, axis=-1L))
sess$run(tf$reduce_mean(tf$reduce_sum(x, axis=-1L)))

# Argmax with axis
# 인덱스 값 리턴
print("============= Argmax with axis ===============")
x = matrix(c(0, 1, 2, 2, 1, 0), nrow=2, byrow = T)

# 0부터 시작하는 인덱스 리턴
sess$run(tf$argmax(x, axis=0L))
sess$run(tf$argmax(x, axis=1L))
sess$run(tf$argmax(x, axis=-1L))

# Reshape, squeeze, expand_dims
print("============= Reshape, squeeze, expand_dims ===============")

t = array(c(0, 1, 2,
            3, 4, 5,
            6, 7, 8,
            9, 10, 11), dim = c(2, 3, 2) )

(t)
dim(t)

sess$run(tf$reshape(t, shape=list(-1L, 3L)))
sess$run(tf$reshape(t, shape=list(-1L, 1L, 3L)))

sess$run(tf$squeeze(matrix(c(0, 1, 2))))
sess$run(tf$expand_dims(c(0, 1, 2), 1L))


# One hot
print("============= One hot ===============")
sess$run(tf$one_hot(matrix(c(0, 1, 2, 0)), depth=3L))

t = tf$one_hot(matrix(c(0, 1, 2, 0)), depth=3L)
sess$run(tf$reshape(t, shape=list(-1L, 3L)))

# casting
print("============= casting ===============")
sess$run(tf$cast(c(1.8, 2.2, 3.3, 4.9), tf$int32))
sess$run(tf$cast(c(T, F, 1 == 1, 0 == 1), tf$int32))

# Stack
print("============= Stack ===============")
x = c(1, 4)
y = c(2, 5)
z = c(3, 6)

# Pack along first dim.
sess$run(tf$stack(list(x, y, z)))

# Ones like and Zeros like
print("============= Ones like and Zeros like ===============")
x = array(c(0, 1, 2,
            2, 1, 0), dim=c(2, 3))
(x)


sess$run(tf$ones_like(x))
sess$run(tf$zeros_like(x))

# Zip
print("============= Zip ===============")
cat("Zip은 R에서는 압축 파일 관련 함수")

# pp.pprint(zip([1, 2, 3], [4, 5, 6]))
# for x, y in zip([1, 2, 3], [4, 5, 6]):
#     print(x, y)

# Transpose
print("============= Transpose ===============")

t = array(list(matrix(c(0, 1, 2, 3, 4, 5), nrow=2, byrow = T),
               matrix(c(6, 7, 8, 9, 10, 11), nrow=2, byrow = T)))
t <- t(t)

a <- matrix(c(0, 1, 2, 3, 4, 5), nrow=2, byrow = T)
b <- matrix(c(6, 7, 8, 9, 10, 11), nrow=2, byrow = T)
    
ab<-cbind(a,b) 
t<-array(ab,dim=c(2,3,2))

t <- tf$constant(t)
t$eval()

t1 = tf$transpose(t, list(1L, 0L, 2L))
t1$eval()

t1$shape
t = tf$transpose(t1, list(1L, 0L, 2L))
t$eval()
t$shape

t2 = tf$transpose(t, list(1L, 2L, 0L))
t2$shape
t2$eval()

t = tf$transpose(t2, list(2L, 0L, 1L))
t$shape
t$eval()

print("END OF CODE")


댓글 없음:

댓글 쓰기