[내 뉴럴 네트워크 만들기/2부] 1. 최소한의 파이썬(찬조출연: C++)
1. 개요
2. 준비 및 실행환경
2-1. 필요한 모듈 설치
2-2. 파이썬 실행
2-3. 파이썬 프롬프트에서 리눅스 명령 실행
3. 최소한의 파이썬
3-1. 파이썬 인터프리터 환경에서 문장 실행
3-2. for 반복문
3-3. 함수
3-4. 배열 다루기 모듈 numpy
3-5. 배열 시각화 모듈 matplotlib
3-6. 객체 크래스
4. 실습
4-1: 파이썬 예제
4-2: C++과 비교 예제
----------------------------------------------------------------------------------------------
[참고서] Make Your Own Neural Networks, Tariq Rashid [book][검색링크]
----------------------------------------------------------------------------------------------
1. 개요
파이썬(python)은 매우 높은 추상화 수준의 컴퓨팅 언어다. 세상에서 가장 '시작하기 쉬운' 컴퓨팅 언어라는 말도 있다. 수많은 라이브러리(모듈, 패키지)들이 준비되어 있어서 적은 양의 코딩으로도 멋진 응용 소프트웨어를 제작할 수 있다. 파이썬(python) 프로그래밍 언어가 '인공지능'에 적합하다고 들 한다. 이는 남이 만들어 놓은 '인공지능' 용 모듈 자원이 많이 축적되어 있기 때문이지 이 언어가 인공지능에 특화된 프로그래밍 언어라는 뜻은 아니다. 하지만 '시작하기' 쉽다고 '잘하기' 쉽다는 말은 아니다. 어쨌든 다들 파이썬을 부르짖으니 이참에 알아보기로 한다. 프로그래밍 언어는 '거기서 거기다.' 실습을 통해 파이썬과 C++ 언어를 비교해보자.
2. 준비 및 실행환경
2-1. 필요한 모듈 설치
리눅스(WSL 가상 머신을 포함해서)환경에서 파이썬 언어를 사용하려면 다음과 같은 소프트웨어들을 설치해야 한다. 리눅스 명령줄에서 파이썬 언어 실행환경(인터프리터)을 설치한다.
sudo apt install python3
sudo apt install python3-dev
sudo apt install python3-pip
과학 및 수학, 통계 그리고 자료 시각화 처리에 유용한 기본 모듈을 설치한다.
sudo apt install python3-numpy
sudo apt install python3-scipy
sudo apt install python3-matplotlib
아래 모듈들은 명령줄 환경을 좀더 편리하게 운영할 수 있도록 해준다. 웹 브라우져에서 쥬피터 노트북(Jupyter Notebook)을 실행 시킬 수 있다. 필수 사항은 아니다.
sudo apt install python3-ipython
sudo apt install python3-ipykernel
2-2. 파이썬 실행
파이썬은 '인터프리터' 언어다. 리눅스 쉘 명령줄에서 python3 을 실행 하면 프롬프트가 나타날 것이다.
$ python3
Python 3.12.3 (main, Mar 3 2026, 12:15:18) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
2-3. 파이썬 프롬프트에서 리눅스 명령 실행
파이썬 프롬프트에서 리눅스 명령 실행하려면 os 모듈을 들여와야 한다. 운영체제에서 제공하는 표준 입출력 <stdio> 함수들을 사용할 수 있다.
>>> import os
>>> os.system("ls -l")
total 24
-rw-r--r-- 1 mychip mychip 135 Apr 7 11:37 arrays.py
-rw-r--r-- 1 mychip mychip 594 Apr 7 12:09 class.py
-rw-r--r-- 1 mychip mychip 51 Apr 7 11:20 for_loop.py
-rw-r--r-- 1 mychip mychip 85 Apr 7 11:22 for_sqr.py
-rw-r--r-- 1 mychip mychip 259 Apr 7 11:44 plotting_arrays.py
-rw-r--r-- 1 mychip mychip 193 Apr 7 12:13 Skeleton_Code.py
현재 디렉토리에 파이썬 파일 'array.py'을 일어 프린터 해보자.
>>> print(open('./arrays.py').read())
import numpy
a = numpy.zeros([3,2])
print(a)
a[0,0] = 1
a[0,1] = 2
a[1,0] = 9
a[2,1] =12
print(a)
print(a[0,1])
v = a[1,0]
print(v)
파이썬 프롬프트에서 미리 작성한 스크립트 파일을 읽어 실행 하려면 exec() 함수를 사용한다.
>>> exec(open('./arrays.py').read())
[[0. 0.]
[0. 0.]
[0. 0.]]
[[ 1. 2.]
[ 9. 0.]
[ 0. 12.]]
2.0
9.0
또는, 파이썬 스크립트 파일을 모듈로 들여와 실행 시킬 수 있다.
>>> import arrays
3. 최소한의 파이썬
Jupyter Notebook, MS Code 등이 편리한 파이썬 실행 환경을 제공한다. 파이썬 명령 줄 환경도 괜찮다. 파이썬 명령 줄 프롬프트는 '>>>' 다.
3-1. 파이썬 인터프리터 환경에서 문장 실행
파이썬의 문장의 기초,
- 파이썬은 문장의 마침표가 따로 없이 '엔터'로 끝난다.
- 제어문의 구역 시작은 콜론(:) 이다.
- 제어문이 영향을 미치는 구역의 표시는 들여쓰기다. 문장 앞에 공백문자(스페이스 또는 탭)넣는다.
- pass 는 아무런 실행내용이 없는 '자리채움'일 뿐이다. 제어 영역의 마침을 표시한다.
- 샵(#) 문자 뒤는 주석(comment)이다.
>>> 2+3
5
>>> print("Hello World!")
Hello World!
>>> x=10
>>> print(x)
10
>>> print(x+5)
15
>>> y=x+7
>>> print(y)
17
>>> print(z)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
3-2. for 반복문
>>> for n in range(10):
... print(n)
... pass
...
0
1
2
3
4
5
6
7
8
9
파일 for_loop.py 에 작성한 for 반목문을 읽어서 실행,
>> print(open('./for_loop.py').read())
# For 반복문
for n in range(10):
print(n)
pass
print("done")
>>> exec(open('./for_loop.py').read())
0
1
2
3
4
5
6
7
8
9
done
3-3. 함수
모든 컴퓨팅 언어가 그렇듯 함수는 이름과 인수 그리고 되돌림 값을 가진다. 함수를 정의하는 def, 되돌림 return은 파이썬의 키워드다.
>>> import os
>>> os.system("cat func_avg.py")
# Function that takes 2 numbers as input
# and outputs their average
def avg(x,y):
print("first input is: ", x)
print("second input is: ", y)
a = (x+y)/2.0
print("average is ", a)
return a
0
>>> import func_avg
>>> func_avg.avg(4,7)
first input is: 4
second input is: 7
average is 5.5
5.5
>>>
변수의 선언과 운영은 컴퓨팅 언어를 대할 때 입문자에게 가장 큰 장벽이다. C++ 같은 언어는 프로그래머에게 컴퓨터의 메모리 운영방식, 예를들어 다양한 자료형과 포인터 같은 이해를 요구하며 매우 까다롭다. 이에 비해 파이썬은 변수형을 따로 선언 할 필요도 없으며 할당 되는 자료형식에 의해 '알아서' 메모리를 운영해준다. 이는 파이썬이 입문하기 '쉬운' 인상은 주는 요인중 하나다.
3-4. 배열 다루기 모듈 numpy
numpy는 통계, 수치해석 등의 응용에서 다차원 배열 객체를 수월하게 다룰 수 있도록 해주는 파이썬 모듈(라이브러리)이다. 배열 값을 0으로 채운 5행 6열 배열 객체를 생성하는 예는 다음과 같다.
>>> import numpy
>>> a = numpy.zeros([5,6])
>>> print(a)
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
대괄호([])는 배열에 접근할 때 사용된다.
>>> a[0,0] = 1
>>> a[3,4] = 2
>>> a[5,5] = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: index 5 is out of bounds for axis 0 with size 5
>>> a[4,5] = 3
>>> print(a)
[[1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 2. 0.]
[0. 0. 0. 0. 0. 3.]]
3-5. 배열 시각화 모듈 matplotlib
# Plotting Array Example
# Filename: plotting_arrays.py
import numpy
arr = numpy.zeros([5,6])
(nRows,nCols)=arr.shape
print('Array has ',nRows, 'x', nCols)
for i in range(nRows):
for j in range(nCols):
arr[i][j] = int(numpy.random.rand()*100)
pass
pass
print(arr)
import matplotlib.pyplot
matplotlib.pyplot.imshow(arr, interpolation="nearest")
matplotlib.pyplot.show()
위의 파이썬을 실행 시켜보자.
>>> import plotting_arrays
Array has 5 x 6
[[81. 44. 98. 82. 13. 77.]
[63. 84. 42. 48. 50. 54.]
[31. 86. 60. 32. 91. 58.]
[49. 81. 3. 53. 22. 67.]
[34. 97. 13. 45. 50. 26.]]
3-6. 객체 크래스
파이썬에서 복합 객체를 사용할 수 있다.
# Filename: ex_class.py
# Class for Dog object
class Dog:
# Initializer or constructor of the class
def __init__(self, petname, temp):
self.name = petname
self.temperature = temp
pass
# Member function status()
def status(self):
print("Name: ", self.name)
print("Temp: ", self.temperature)
pass
def setTemperature(self, temp):
self.temperature = temp
pass
# This Dog can bark()
def bark(self):
print("woof!")
pass
pass
크래스 사례화 방법은 크래스를 함수처럼 호출한다. 이는 크래스의 초기화 함수 __init()__ 를 실행하게 되는데 C++ 언어에서 구성자(constructor)와 같다. 크래스의 소속 함수를 통해 객체에 접근 한다.
>>> exec(open('dog_class.py').read())
>>> sizzles=Dog("sizzles", 37)
>>> sizzles.status()
Name: sizzles
Temp: 37
>>> sizzles.bark()
woof!
----------------------------------------------
[실습1] 아래의 파이썬 소스 파일들을 읽고 실행시켜보자.
1. for_loop.py
2. for_sqr.py
3. func_avg.py
4. arrays.py
6. dog_class.py
이정도 파이썬을 이해했다면 신경망을 시작해 보기에 충분한하다고 한다. 파이썬이 시작하기 쉽기는 한 모양이다.
[실습2] 아래의 C++ 소스 파일들을 파이썬과 비교해보자.
1. arrays.cpp
2. for_sqrt.cpp
3. func_avg.cpp
파이썬에 비하면 C++ 는 좀더 신경쓸 일이 많다. 이는 파이썬이 C++에 비해 '직관적(척! 보고 인간의 의도를 알아서 처리해준다)'이라는 뜻이며 추상성이 높다는 뜻이기도 하다.
댓글 없음:
댓글 쓰기