은공지능 공작소 :: '딥러닝 공부' 카테고리의 글 목록 (4 Page)

 

 

1. 텐서란 무엇인가?

 

 

 

텐서(tensor)란, 일종의 행렬입니다.

이는 스칼라가 될 수도 있고,

다차원의 벡터도 될 수 있습니다.

 

텐서플로(tensorflow)는 말 그대로

텐서(tensor)의 흐름(flow)를

설계하는 것이라고 볼 수 있습니다.

 

텐서는 다양한 방법을 통해

정의될 수 있습니다.

 

오늘은 가장 기본적인 텐서들에 대해서

다루어 보겠습니다.

 

 

def sRun(input):
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        rst = input.eval()
        print(rst)
        return(rst)

들어가기에 앞서,

텐서의 내용물을 확인해볼 수 있는

간단한 함수를 하나 만들겠습니다.

 

이는 지난 시간의

세션에 관련된 포스팅을 보셨다면

이해하실 수 있습니다.

 

 

2019/07/06 - [딥러닝 공부/Tensorflow] - [tensorflow] Session에 관하여

 

[tensorflow] Session에 관하여

1. 왜 텐서플로 세션을 이해해야 하는가? 텐서플로 세션(Session)은 일종의 실행창입니다. 딥러닝을 공부하다 보면 텐서의 내용물과 연산결과를 확인하고 싶을 때가 많습니다. 그렇기 때문에 텐서플로 세션에 대..

chan-lab.tistory.com

 

 

 

 

2. Constant 와 Variable

 

constant는 상수를 뜻합니다.

수학에서 상수는 변수와 구분되는 개념으로,

변하지 않고 고정된 값을 의미합니다.

텐서플로에서 tf.constant() 함수를 통해

상수 텐서를 만들 수 있습니다.

 

Variable은 변수를 뜻합니다.

변수는 수학에서 투입값에 따라

변하는 숫자를 의미하지만, 

텐서플로의 Variable은 Constant와

큰 차이가 없습니다.

 

 

# constant
c1 = tf.constant(1)
c2 = tf.constant([1])
c3 = tf.constant([[1, 2], [3, 4]])

# variable
v1 = tf.Variable(1)
v2 = tf.Variable([1])
v3 = tf.Variable([[-1, 0], [10, 5]])

간단하게 constant와 Variable을

만들어 보았습니다.

 

대괄호 [ ]를 쓴 것과

안 쓴 것의 차이를 잘 봐주세요.

대괄호를 써주어야 텐서의 shape가

형성이 됩니다.

 

아래 출력문을 통해 확인해보겠습니다.

 

 

 

print(c1) # Tensor("Const_26:0", shape=(), dtype=int32)
print(c2) # Tensor("Const_27:0", shape=(1,), dtype=int32)
print(c3) # Tensor("Const_28:0", shape=(2, 2), dtype=int32)

sRun(c1) # 1
sRun(c2) # [1]
sRun(c3) # [[1 2] [3 4]]
print(v1) # <tf.Variable 'Variable:0' shape=() dtype=int32_ref>
print(v2) # <tf.Variable 'Variable_1:0' shape=(1,) dtype=int32_ref>
print(v3) # <tf.Variable 'Variable_2:0' shape=(2, 2) dtype=int32_ref>

sRun(v1) # 1
sRun(v2) # [1]
sRun(v3) # [[-1  0] [10  5]]

현재로서 constant와 Variable은

차이가 거의 없다고 보셔도 될 듯 합니다.

 

나중에 텐서 그래프에서

런타임, 리소스 등에서 차이가 발생할

수도 있지만 그것은 논외로 하겠습니다.

 

여기서 포인트는

어떻게 constant와 Variable을 만드는지, 

또 shape를 확인하는 법에

맞춰주시면 됩니다.

 

그럼 이제부터는 get_variable 함수에 대해

알아보도록 하겠습니다.

 

 

 

 

 

3. get_variable

 

 

with tf.variable_scope("a", reuse=tf.AUTO_REUSE):
    sRun(tf.get_variable("v", [1]))
    sRun(tf.get_variable("v2", [2, 2]))
output:
[0.7743064]
[[ 0.7424123  1.0585083]
 [-0.9365851  0.4901656]]

 

아까 봤던 Variable과 get_variable은

비슷해 보이지만 엄연히 다른 녀석입니다.

 

get_variable은 shape에 맞춰서

랜덤값을 생성해 줍니다.

 

이 함수를 동작하기 위해서

variable_scope(범위)의 이름과

get_variable의 이름을

지정해주어야 합니다.

(조금 까다롭습니다.)

 

또한 계속 값이 랜덤으로 바뀌는 것을

확인하기 위해서

reuse 옵션을 AUTO_REUSE로

맞춰주시는 것도 잊지 마셔야 겠습니다.

 

굳이 Variable과의 차이점이라고 한다면,

Variable 함수는 픽스된 고정값을

생성해 주는 반면에,

get_variable은 매번 새로운 랜덤값을

생성해주고 범위 이름과 변수 이름이

지정되어야 한다는 점입니다.

 

 

 

 

 

 

-----------------------------------------------

오늘 포스팅은 여기서 마치겠습니다.

감사합니다.

 

 

 

반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,

 

 

 

 

 

1. 왜 텐서플로 세션을 이해해야 하는가?

 

 

텐서플로 세션(Session)은 일종의 실행창입니다.
딥러닝을 공부하다 보면
텐서의 내용물과 연산결과를 확인하고 싶을 때가 많습니다.

그렇기 때문에 텐서플로 세션에 대해 이해하는 것이
텐서플로를 이해하는 지름길이라고 생각합니다.
스스로 확인하면서 이해를 높여가기 위함입니다.

 

 

 

 
 
 

2. 세션 작동법

 

세션 작동은 크게 3부분으로 이루어집니다.

 

세션 선언문은 세션을 만들어 주는 역할을 합니다.

지금부터 sess라는 변수에 세션을 하나 할당하겠다는 의미입니다.

 

 

세션은 기본적으로 크게 2가지가 있는데,

tf.Session()과 tf.InteractiveSession()입니다.

tf.InteractiveSession은 자동으로 터미널에 default session을 할당하지만,

tf.Session은 그렇지 않기 때문에

항상 with 절과 사용해야 하는 차이점이 있습니다.

 

 

세션 실행문은 sess.run() 함수로 실행됩니다.

괄호 안에 텐서나 텐서연산을 넣어서 실행을 해주면 됩니다.

 

 

텐서 종료문은 sess.close() 함수로 실행이 됩니다.

단, 이 종료문은 with 절에서는 굳이 안써줘도 무방합니다.

 

 

 

 

 

 

 

 

 

3. 코드 실습

 

 

import tensorflow as tf

a = tf.constant(2)
b = tf.constant(3)
c = tf.multiply(a, b)

위의 코드는 텐서플로 라이브러리를 불러와서

a, b, c 라는 텐서를 생성하는 코드입니다.

a, b는 상수로, c는 a와 b를 곱한 결과를 담았습니다.

 

 

 

# session -> 일종의 실행창

sess = tf.Session() # 세션 선문
sess.run(tf.global_variables_initializer()) # 변수 초기화 -> 습과화하는 것이 좋아요

print(sess.run(c)) # 세션 실행문
# print(c.eval()) # 오류 발생 -> default session이 지정되지 않았기 때문.
sess.close() # 세션 종료문

설명은 코드 주석으로 대체하겠습니다.

 

여기서 eval() 함수는 작동하지 않습니다.

텐서는 세션 내에서만 작동합니다.

그런데 eval() 함수는 세션을 거치지 않고

c라는 텐서에 담겨있는 결과를 볼 수 있는 기본명령어입니다.

 

eval()이 작동하기 위해서는

세션 밖에서 c라는 텐서를 보기 위한

기본(default) 세션이 지정되어야 합니다.

 

tf.Session()은 default 세션을 지정해주지 않습니다.

defalut 세션을 지정해주려면 다른 명령어를 사용하거나,

with 절과 함께 사용,

tf.InteractiveSession() 명령어를 써줘야합니다.

 

또한 세션 종료문으로 세션을 종료해주시는 것도 잊지 말아주세요.

 

 

 

 

 

with tf.Session() as sess:
    
    sess.run(tf.global_variables_initializer())
    print(sess.run(c))
    print(c.eval()) # with 절에서는 해당 명령어가 잘 작동합니다.

with 절에서는 tf.close()를 써주지 않아도 무방합니다.

또한 여기서 c.eval() 함수는 제대로 동작합니다.

with 절 내에서 세션선언이 default로 되어있기 때문입니다.

 

 

 

 

 

sess = tf.InteractiveSession() # 자동으로 default session을 지정해줌
sess.run(tf.global_variables_initializer())

print(c.eval()) # 제대로 작동
print(sess.run(c)) 

sess.close()

자동으로 defalut 세션을 지정해주는

InteractiveSession 선언문입니다.

 

c.eval() 이 제대로 작동하는 것을 보면

default 세션이 제대로 작동하는 것을 알 수 있습니다.

 

with 절을 쓰지 않았기 때문에

sess.close() 문도 써주는 것을 잊지 마세요.

 

 

 

 

 

 

 

 

 

4. 정리

 

정리하자면 Session을 동작하는 방법에는

크게 2가지가 있다고 보시면 됩니다.

 

 

 

with tf.Session() as sess:
    
    sess.run(tf.global_variables_initializer())
    print(sess.run(c))
    print(c.eval())

위와 같이 with 절과 함께 Session을 쓰는 것이

첫번째 방법입니다.

가장 대중적으로 쓰이는 방법이기도 합니다.

 

 

 

 

 

sess = tf.InteractiveSession() # 자동으로 default session을 지정해줌
sess.run(tf.global_variables_initializer())

print(c.eval()) # 제대로 작동
print(sess.run(c)) 

sess.close()

두번재 방법은 위와 같이

InteractiveSession 선언을 해주는 것입니다.

하지만 이는 세선 종료문을 써줘야 한다는

번거로움이 있기도 합니다.

 

 

오늘 포스팅은 여기서 마치겠습니다.

감사합니다.

 
 

 

반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,

 

딥러닝을 공부하다 보면, 외부파일들로부터 함수를 불러와야 하는 경우가 많습니다.

이러한 작업은 pycharm에서는 비교적 간단하게 할 수 있으나,

jupyter notebook을 사용하시는 분들은 조금 힘드실 수 있습니다.

이런 이유 때문에 해당 포스팅을 작성해보게 되었습니다.

 

 

 

1. [사전준비] 함수가 담겨있는 py 파일 만들기

 

def plus_multi(a, b, c):
    rst = a + b
    rst2 = rst * c
    return(rst2)
위와 같이 간단한 함수가 담겨있는 txt 파일을 하나 생성해 줍니다.
 
 

그런 후에 이를 저장하고, 확장자를 py로 바꿔주면 간단한 py 파일이 하나 생성이 됩니다.

 

 

 

 

2. ipynb 파일이 있는 곳으로 py 파일을 옮겨줍니다.

 

현재 디렉토리 위치는 Desktop/Fundamental-of-deep-learning/test_01 입니다.

이 위치에 아까 만든 py 파일을 옮겨두도록 하겠습니다.

 

 

 

 

 

이제 다시 test_0101.ipynb 파일로 돌아옵니다.

아래와 같이 코드를 입력해 봅시다.

 

 

 

 

 

 

from math_function import plus_multi

plus_multi(1, 2, 3) # result: 9
정상적으로 외부 함수를 잘 받아와서 동작하는 것을 확인하실 수 있습니다.
 

 

 

 

 
 

3. 하위 폴더에 있는 파일 접근법

 

 functions_01이라는 폴더 안에 math_function.py에 접근하는
방법에 대해 알아보도록 하겠습니다.
 
 
 
from function_01.math_function import plus_multi

plus_multi(1, 2, 3) # result: 9
이럴 경우, 위와 같이 단순히 점( . )으로 구분자를 만들어 주면 됩니다.
 
 
팁을 하나 드리자면, 아래와 같이 plus_multi를 줄여서
더 코딩을 간단히 하는 방법도 있습니다.
from function_01.math_function import plus_multi as pm

pm(1, 2, 3) # result: 9

 

 

 

 

이해가 안되시는 분들은 유튜브 동영상을 참고해주시면 될 것 같습니다.

 

오늘 포스팅은 여기까지 하겠습니다. 감사합니다.

 

 

 
 

 
 Chan's Deep Learning
  • 더욱 다양한 콘텐츠들을 만나보세요!
  • Tensorflow, Keras 등 최신 기술을 쉽게!
  • 구독과 좋아요는 감사합니다 ^^
  • chan-lab.tistory.com

 

 

 

반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,

 

 

 

 

1. NVIDIA를 최신버전으로 업그레이드 합니다.

 

 

제어판이 안열린다면? -> 최신버전으로 업그레이드 해야 합니다.

 

 

 

처음 환경을 구축하시는 분들은 NVIDIA 제어판이 안 열립니다.

드라이브를 너무 오래 전에 설치하신 분들도 새로 다운받아서 설치하셔야 할 겁니다.

아래 링크로 들어가셔서 필요한 드라이버를 찾아 수동 설치하시면 됩니다.

 

 

https://www.nvidia.com/Download/index.aspx

 

Download Drivers | NVIDIA

 

www.nvidia.com

 

 

 

자신의 GPU가 어떤 것인지 모르시는 분들은 cmd를 키시고, dxdiag라고 쳐보십시요.

디스플레이2 탭에 가면 자신의 GPU 정보를 확인할 수 있습니다.

저는 게이밍 노트북을 사용중이고, GTX 1070을 사용 중입니다.

 

명령프롬프트는 시작버튼 옆 검색 -> cmd라고 검색하시면 편리합니다.

 

 

 

 

저는 위와 같이 맞춰주니 정상적으로 설치가 되었습니다.

애먹었던 부분은 Window Driver Type인데, Standard로 하니까 설치가 안 되더라구요.

DCH로 바꿔주니까 정상적으로 설치 되었습니다.

(이 부분은 케바케이니 참고하시면 될 듯 합니다.)

 

다운로드 타입은 GRD로 설정해주시면 됩니다.

파일을 받으셨다면 끝까지 설치를 다 해주시면 됩니다.

 

 

 

 

 

NVIDIA 제어판이 정상적으로 실행된다면

성공적으로 NVIDIA 드라이버를 업그레이드 하신 것입니다.

 

 

 

 

 

 

 

 

 

 

 

2. 아나콘다 설치하기

 

아래 사이트에 들어가셔서 최신 버전의 아나콘다를 다운받으시면 됩니다.

 

https://www.anaconda.com/distribution/

 

Anaconda Python/R Distribution - Anaconda

The open-source Anaconda Distribution is the easiest way to perform Python/R data science and machine learning on Linux, Windows, and Mac OS X. With over 11 million users worldwide, it is the industry standard for developing,…

www.anaconda.com

 

OS에 맞는 것으로 python 3.7 받으시면 됩니다.

 

 

 

 

설치는 쭉쭉 진행해주시되,

Add anaconda to my PATH variable에 체크만 해주시면 됩니다.

 

 

 

 

 

 

 

 

3. Conda 환경 업그레이드 하기

 

Anaconda Prompt를 실행시킨 후, 아래 명령어들을 차례대로 입력합니다.

 

conda update conda

conda update anaconda

conda update python

conda update --all

 

 

 

 

 

 

4. 새로운 conda 개발환경 만들기

 

아래와 같은 방법으로 새로운 개발환경을 만들 수 있습니다.

이런 방법을 통해, 기존의 개발환경과는 독립된 개발환경을 만들 수 있는 것입니다.

(딥러닝을 하다보면 여러 라이브러리나 패키지가 충돌할 경우가 있는데, 이럴 때 유용하다고 합니다.)

conda create --name tf-gpu

 

 

 

 

아래와 같이 입력해보면 자신이 가지고 있는 개발환경 리스트를 볼 수 있습니다.

conda info --envs

저같은 경우는 2개가 뜹니다.

base는 원래 있던 것이고

tf-gpu는 새롭게 만든 개발환경입니다.

이제 base에서 tf-gpu로 개발환경을 바꾸어 보겠습니다.

 

conda activate tf-gpu

아나콘다 프롬프트에서 (base)로 시작하는 부분이

(tf-gpu)로 바뀐 것을 확인할 수 있습니다.

이제 이러한 상태에서 주피터 노트북을 켜보겠습니다.

저 상태에서 jupyter notebook이라고 타이핑하시면 됩니다.

 

 

정상적으로 작동이 잘 되는 모습입니다.

 

 

 

 

 

* 앞으로 주피터 노트북을 실행하실 때, 항상 위와 같이 tf-gpu 환경에서 실행하시는 것을 권장드립니다.

그렇지 않을 경우, 주피터 노트북이 켜지긴 하나 tensorflow import가 안 먹히는 경우가 있다고 합니다.

 

 

 

 

이상입니다.

 

본 포스팅은 아래의 게시글을 참조하여 작성하였습니다.

https://www.pugetsystems.com/labs/hpc/How-to-Install-TensorFlow-with-GPU-Support-on-Windows-10-Without-Installing-CUDA-UPDATED-1419/

반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,