1차시: 텐서플로우 2.x 활용을 위한 Python 3 기초 활용

AI 맛보기 1주차: 2020. 07. 07. 20:00 ~ 22:00 (120분)

  1. 표준 입력, 표준 출력, 변수
  2. 흐름 제어: 반복문
  3. 흐름 제어: 분기문
  4. 함수
  5. 필수 자료형: 리스트
  6. 필수 자료형: 사전
  7. 시각화

참고자료

1. 표준 입력, 표준 출력, 변수


In [ ]:
### 파이썬 3 로 인사하기
print('안녕하세요')

In [ ]:
### 덧셈 뺄셈 곱셈 나눗셈
4 - 2

In [ ]:
### 문자열?
'이렇게' + ' ' + '합쳐서' + ' ' + '출력'

In [ ]:
### 덧셈기: 자연수
x = int(input('첫번째 피연산자를 입력하세요: '))
y = int(input('두번째 피연산자를 입력하세요: '))
print(f'{x} + {y} = {x+y}')

In [ ]:
### 연습문제1) 3항 곱셈기: 자연수
x = int(input('첫번째 피연산자를 입력하세요: '))
y = int(input('두번째 피연산자를 입력하세요: '))
z = int(input('세번째 피연산자를 입력하세요: '))
print(f'{x} x {y} x {z} = {x*y*z}')

2. 흐름 제어: 반복문


In [ ]:
### 플로우 컨트롤: for loop
import time

print('로켓 발사 카운트 다운!')
for number in range(10, 0, -1):
    print(f'발사 {number}초 전!')
    time.sleep(1)
print(f'로켓 발사!')

In [ ]:
### 플로우 컨트롤: while loop
print('비행기 이륙합니다!')
height = 0
while height < 10000:
    print(f'고도 {height:05d}km')
    height = height + 1000
print(f'고도 {height:05d}km 도달!')

In [ ]:
### 연습 문제) 짝수 출력기: 0부터 20까지 짝수만 출력!
n = int(input('어디까지~? '))
for number in range(0, n+1, 2):
    print(number)

3. 흐름 제어: 분기문


In [ ]:
### 분기문: if
x = int(input('입력: '))
print(f'{x}를 2로 나누어봅니다.')
while True:
    x = x // 2
    print(f'x = {x}')
    if x < 10:
        print('x가 10보다 작아졌으므로 종료합니다.')
        break
    else:
        print('x가 아직 10보다 크므로 계속합니다.')

In [ ]:
### 연습 문제) 곱셈 퀴즈 - 정답을 입력하면, 정답입니다! 오답을 입력하면, 오답입니다! 를 출력하세요
import random

x = random.randint(1, 10)
result = x * random.randint(1, 100)
print(f'{x} x ? = {result}')
y = int(input('정답: '))
if y == result//x:
    print('정답입니다.')
else:
    print('오답입니다.')

4. 함수


In [ ]:
### 함수: 제곱
def power2(num):
    return num**2

x = int(input('입력: '))
x2 = power2(x)
print(f'{x}의 제곱은 {x2}입니다.')

In [ ]:
### 연습문제) 구구단을 출력 함수 구현
def product(x, y):
    return x * y

dan = int(input('몇 단? '))
for i in range(0, 10):
    print(f'{dan} x {i} = {product(dan, i)}')

5. 필수 자료형: 리스트


In [ ]:
### 리스트: 순서와 중복이 가능한 연속된 자료
l = [4, 2, 3, 4, 9, 1]
for i in l:
    print(i)

In [ ]:
### 구구단 리스트 만들기
l = list() # []
dan = int(input('몇 단? '))
for i in range(0, 10):
    l.append(product(dan, i))
print(f'{dan}단: {l}')

In [ ]:
### 리스트 참조
i = 4
j = -1
print(f'길이 {len(l)}')
print(f'{i}번째 원소와 {j}번째 원소의 합: {l[4] + l[-1]}')

In [ ]:
### 연습문제) 구구단 짝수번째 원소들의 합
l = list() # []
dan = int(input('몇 단? '))
for i in range(0, 10):
    l.append(product(dan, i))
print(f'{dan}단: {l}')

s = 0
for i in range(0, len(l)):
    if i%2 == 0:
        s = s + l[i] # s += l[i]
print(f'{dan}단 짝수번째 원소들의 합: {s}')

6. 필수 자료형: 사전


In [ ]:
### 사전형 저장
x = {'이름': '문현수',
     '소속': '충남대학교',
     '나이': 32}
print(x)

In [ ]:
### 사전형 참조
print(f'이름: {x["이름"]}, 나이: {x["나이"]}')

In [ ]:
### 연습문제) 주소록
n = int(input('몇 명 저장? '))
address_book = []
for _ in range(0, n):
    name = input('이름: ')
    age = input('나이: ')
    address_book.append({'이름': name,
                         '나이': age})
print(f'주소록에는 {len(address_book)}명이 저장되어 있습니다.')
print(f'주소록 내용:')
for data in address_book:
    print(data)

7. 시각화


In [ ]:
import random
numbers = list()
for _ in range(0, 10):
    numbers.append(random.randint(0, 10))
print(f'무작위 생성: {numbers}')

In [ ]:
import matplotlib.pylab as plt
%matplotlib inline

fig = plt.figure(figsize= (8, 8))
ax = fig.add_subplot()
ax.plot(numbers)

In [ ]:
### 연습 문제) 코로나 확진자 선 그래프
x = ['06/28', '06/29', '06/30', '07/01', '07/02', '07/03', '07/04']
y = [42, 42, 51, 54, 63, 63, 61]

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot()
ax.set_ylim((0, 80))
ax.set_title('COVID-19')
ax.set_xlabel('Date')
ax.set_ylabel('Counts')
ax.plot(x, y)

8. 텐서플로우 맛보기


In [ ]:
### 데이터 불러오기
import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
print(f'학습용 데이터 {len(x_train)}개 불러오기 완료!')

In [ ]:
### 모델 생성
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
print(f'모델 생성 왼료!')
model.summary()

In [ ]:
### 0번 이미지 확인
import matplotlib.pylab as plt
%matplotlib inline

fig = plt.figure(figsize=(4, 4))
ax = fig.add_subplot()
ax.imshow(x_train[0])

In [ ]:
### 학습 전 예측 결과
import numpy as np
predictions = model(x_train[:1]).numpy()
result = np.argmax(tf.nn.softmax(predictions).numpy())
print(f'학습 전 0번 이미지 예측 결과: {result}')

In [ ]:
### 학습 시작!
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

In [ ]:
### 학습 후 예측 결과
import numpy as np
predictions = model(x_train[:1]).numpy()
result = np.argmax(tf.nn.softmax(predictions).numpy())
print(f'학습 후 0번 이미지 예측 결과: {result}')

In [ ]: