20220921

강태공·2022년 9월 24일
0

지난 시간 리뷰

1.파이썬에서는 클래스 정의는def.. 그리고 기본 인자로 self

오브젝트와 인스턴스의 관계?

붕어빵 틀 클래스
실제로 구워낸 건 붕어빵
붕어빵을 구별하는건 인스턴스

2.상속
UML클래스 참고

3.다중상속 vs 단일상속
다중상속 : C++ , Python : Class ~(A,B)
UML에서는 삼각형머리에 실선(방향 자식0>부모)

다중상속의 예시

class Person:
    def greeting(self):
        print('안녕하세요.')

class University:
    def manage_credit(self):
        print('학점 관리')

class Undergraduate(Person, University):
    def study(self):
        print('공부하기')

james = Undergraduate()
james.greeting()         # 안녕하세요.: 기반 클래스 Person의 메서드 호출
james.manage_credit()    # 학점 관리: 기반 클래스 University의 메서드 호출
james.study()            # 공부하기: 파생 클래스 Undergraduate에 추가한 study 메서드
	

단일상속(주류) : 자바, C#, 삼각형 머리에 점선(방향 자식->부모)

다중상속의 문제점 : 상속을 받고 나서 재활용을 얼마나 하나?
10개의 메소드를 가지는 클래스를 상속받았어, 이중에 5개만 활용함. 안 쓰는 나머지 코드 5개가 메모리 차지 -> 시스템 부하발생
약점을 보완 --> interface(여러 개를 받는 것이 가능)

  1. 클래스와 인터페이스

-클래스

  • 필드(변수+데이터) + 메소드(함수,코드)
  • 순수(?) 추상클래스는 인터페이스 흉내내기

-인터페이스

  • 필드만 존재
  • 메소드는 없다(바디는 없음, 선언만 가능)
  • 인터페이스 패턴이 대박(DI패턴-스프링의 핵심 패턴), --> 제약을 많이 했지만 다중상속으로 오히려 좋아짐
  • 오버헤드 없는 상속(코드 자체가 없으니)

Pytorch

-파이썬기반 오픈소스 딥러닝 라이브러리

  • 원래는 Lua언어기반의 Torch
  • 최초 알파고는 Torch기반(딥마인드)

-최신버전 1.12

-페이스북이 주도

  • 기존의 caffe2와 통합(2018.3) 토치와 카페가 합쳐져서 파이토치

  • ONYX(Open Neural Network Exchange)

  • GPU가속 지원(Nvidia CUDA)

-텐서플로와 같이 딥러닝분야 Big2

  • 연구와 논문 등 에서 많이 사용됨

-텐서플로2 이후 케라스(Keras) 중심
에 대한 반발로 PyTorch사용빈도 증가

  • 텐서플로2가 자유도를 제약

-자연어/영상처리(YOLO) 처리분야에서
텐서플로에 비해 많이 사용됨

Define by Run(PyTorch 방식)

-일반적인 파이썬 코딩과 비슷

  • 텐서플로(케라스)는 템플릿방식이라많은 부분 자동화되어있음
  • 제공되는 기능을 변경하려면 매우 까다로움

-파이토치는 일반적인 프로그램과 유사한 구조라 상대적으로 직관적이고 이해하기
쉬움

  • !!자유도가 높음!!

-세션이 필요하지 않다.

  • 텐서플로2(케라스)에서도 세션이 없어짐

Define and Run(텐서플로1 방식)

-텐서 선언

  • Variable/constant vs. Placeholder vs. convertToTensor

-계산 그래프 생성(Define)
-세션생성
-데이터 입력(feed_dict 옵션 사용) -> 코드 실행(run/eval)

-비직관적이고난이도가 높다 -> keras 로 전환(텐서플로2)

  • 간단하지만 자유도의 제약
  • 기존 방식에 적응한 사람들의 반발이 심함..

텐서플로 예제(텐서정의1)

텐서가 무엇인고? = 그냥 행렬이다. 텐서플로우는 텐서를 정의하고 조작하면서 뭐하겠다는거

!pip3 install tensorflow
import tensorflow as tf

tf.compat.v1.disable_eager_execution() # linebyline을 끊다(원래 오리지날 함수지만 호환성을 위해 2에서 1쓸때 필요한 코드)

x = tf.constant(1, name='x') # 텐서 정의
print(x) # rank/shape/dtype
y = tf.Variable(x+9,name='y')
print(y)

model = tf.compat.v1.global_variables_initializer() # 텐서 초기화

with tf.compat.v1.Session() as session:
 session.run(model)
 print(session.run(y))

0개의 댓글