# 인터넷 연결 이슈로 인해 손코딩으로 공부
data=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
data
for row in data:
print(row)
[1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] [13, 14, 15, 16]
for row in range(len(data)):
print(data[row])
print('-'*50)
# 최악의 방법
[1, 2, 3, 4] -------------------------------------------------- [5, 6, 7, 8] -------------------------------------------------- [9, 10, 11, 12] -------------------------------------------------- [13, 14, 15, 16] --------------------------------------------------
java등의 언어에서는 대부분 이렇게 사용하지만 python에서는 numpy 모듈을 사용하여 작업하는 것이 권장된다. 이는 전문적인 프로그래밍 언어와 목적의 차이를 보이기 때문이기도 하고, 속도의 문제기도 하다.
cnt = 0
sum = 0
for row in data[:3]:
print('-'*50)
print(f'{cnt}번 행')
print(row)
cnt += 1
sum = 0
for col in row:
sum += col
print(f'row sum = {sum}')
-------------------------------------------------- 0번 행 [1, 2, 3, 4] row sum = 10 -------------------------------------------------- 1번 행 [5, 6, 7, 8] row sum = 26 -------------------------------------------------- 2번 행 [9, 10, 11, 12] row sum = 42
위는 행 단위 sum, 아래는 열 단위 sum
# data[0][0],data[1][0],data[2][0]
# data[0][1],data[1][1],data[2][1]... 열이 나오게 출력하기
sum = 0
for col in range(len(data)):
print('-'*50)
sum = 0
for row in range(len(data)):
print(data[row][col])
sum += data[row][col]
print(f'col sum = {sum}')
-------------------------------------------------- 1 5 9 13 col sum = 28 -------------------------------------------------- 2 6 10 14 col sum = 32 -------------------------------------------------- 3 7 11 15 col sum = 36 -------------------------------------------------- 4 8 12 16 col sum = 40
클래스안의 함수로 바꾸어 작성하기
요소의 개수가 같은 array로 가정하므로 행의 개수를 len(data[0])으로 작성하였음에 유의
만약 열의 개수가 다르다면
from itertools import zip_longest
lists = [[1, 2, 3],
[4, 5],
[6, 7, 8, 9]]
num_cols = max(len(row) for row in lists) # 열의 최대 개수를 가져옵니다.
for col in range(num_cols):
column_elements = [row[col] for row in zip_longest(*lists)]
print(f"열 {col+1}: {column_elements}")
식으로 None값을 처리해주면 된다.
class MySum:
def rowSum(self, data):
cnt = 0
sum = 0
for row in data:
print('-'*50)
print(f'{cnt}번 행')
print(row)
cnt += 1
sum = 0
for col in row:
sum += col
print(f'row sum = {sum}')
def colSum(self, data):
sum = 0
rowCnt = len(data) # 행의 개수
colCnt = len(data[0]) # 열의 개수
for col in range(colCnt):
print('-'*50)
sum = 0
for row in range(rowCnt):
print(data[row][col])
sum += data[row][col]
print(f'col sum = {sum}')
mySum = MySum()
mySum.rowSum(data), mySum.colSum(data)
data2=[[2,1,2],[3,2,1]]
mySum.rowSum(data2), mySum.colSum(data2)
-------------------------------------------------- 0번 행 [1, 2, 3, 4] row sum = 10 -------------------------------------------------- 1번 행 [5, 6, 7, 8] row sum = 26 -------------------------------------------------- 2번 행 [9, 10, 11, 12] row sum = 42 -------------------------------------------------- 3번 행 [13, 14, 15, 16] row sum = 58 -------------------------------------------------- 1 5 9 13 col sum = 28 -------------------------------------------------- 2 6 10 14 col sum = 32 -------------------------------------------------- 3 7 11 15 col sum = 36 -------------------------------------------------- 4 8 12 16 col sum = 40 -------------------------------------------------- 0번 행 [2, 1, 2] row sum = 5 -------------------------------------------------- 1번 행 [3, 2, 1] row sum = 6 -------------------------------------------------- 2 3 col sum = 5 -------------------------------------------------- 1 2 col sum = 3 -------------------------------------------------- 2 1 col sum = 3
(None, None)
return 값이 없어서 None 값이 나옴에 유의
import numpy as np
y1 = np.random.rand(1000) # 무작위 난수
y2 = np.random.randn(1000) # 정규분포를 따르는 난수
import matplotlib.pyplot as plt
plt.figure(figsize=(10,3)) # 도화지 생성
plt.subplot(1,2,1)
plt.hist(y1)
plt.subplot(1,2,2)
plt.hist(y2)
(array([ 2., 16., 60., 143., 255., 264., 158., 72., 24., 6.]), array([-3.40220908, -2.75485029, -2.10749151, -1.46013273, -0.81277394, -0.16541516, 0.48194362, 1.12930241, 1.77666119, 2.42401998, 3.07137876]), <BarContainer object of 10 artists>)
데이터가 발생하는 구간이 randn함수를 사용한 난수들은 가운데에 집중적으로 분포한 모습을 확인할 수있다.
data = np.random.rand(3,4)*7 # 7범위 안에서 3행4열 난수값이 발생
intData = data.astype(int) # 정수로 형변환
intData
array([[4, 1, 0, 2], [6, 2, 4, 2], [3, 2, 1, 1]])
손으로 코딩하면 아래와 같다.
for i in range(len(data)):
for j in range(len(data[0])):
data[i][j]=int(data[i][j])
data
array([[4., 1., 0., 2.], [6., 2., 4., 2.], [3., 2., 1., 1.]])
# shift + tap을 누르면 함수의 인자들을 볼 수 있다.
np.sum(intData)
28
# axis 값은 0을 주게 되면 열 합, 1을 주게 되면 행 합을 의미
np.sum(intData, axis=1)
array([ 7, 14, 7])
numpy 조건문
- 조건에 맞는 요소(elements)선택 및 수정
data[data<5] = -100 # data의 요소 중 5보다 작은 값들은 -100으로 바꾸는 조건문
# np.where(data<5) 로 쓴 것과 같다.
data
array([[-100., -100., -100., -100.], [ 6., -100., -100., -100.], [-100., -100., -100., -100.]])
- 다중 조건을 위해선 and or 연산자를 사용
(data<7) & (data>1) # and 조건문. 둘다 참이어야 참
# np.logical_and(data<7,data>1) # 위와 같은 조건문
array([[False, False, False, False], [ True, False, False, False], [False, False, False, False]])
data[np.logical_and(data<7,data>1)] = 0
data
array([[-100., -100., -100., -100.], [ 0., -100., -100., -100.], [-100., -100., -100., -100.]])
이미지
- PIL
PIL은 Python Imaging Library의 약자로 파이썬에서 이미지 처리 및 조작을 위한 라이브러리입니다.
1.1. PIL의 Image 클래스는 이미지를 로드하고, 조정, 저장하는 등의 작업을 수행합니다.
!pip install PILLOW
!pip install matplotlib
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: PILLOW in /usr/local/lib/python3.10/dist-packages (8.4.0) Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (3.7.1) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.0.7) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (0.11.0) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (4.39.3) Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.4.4) Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (1.22.4) Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (23.1) Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (8.4.0) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (3.0.9) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib) (2.8.2) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
!pip install numpy
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (1.22.4)
glob
glob은 파일 및 디렉토리 경로르 패턴 매칭을 통해 검색하는데 사용되는 파이썬의 라이브러리 모듈입니다.
-
경로 패턴 매칭: glob 모듈을 사용하여 경로 이름을 특정 패턴과 일치시킬 수 있습니다. 패턴은 와일드카드 문자인 * 및 ?을 사용하여 지정할 수 있습니다. 예를 들어, “.txt”는 확장자가 .txt인 모든 파일을 찾으며, “image_“는 image_로 시작하는 모든 파일을 찾습니다.
-
파일 및 디렉토리 검색: glob 모듈을 사용하여 지정된 패턴과 일치하는 파일 및 디렉토리를 검색할 수 있습니다. 이를 통해 특정 디렉토리에서 특정 유형의 파일을 찾거나, 특정 패턴에 일치하는 파일들을 검색할 수 있습니다.
import glob
# 현재 디렉토리에서 모든 .txt 파일 검색
txt_files = glob.glob("*.txt")
print(txt_files)
# images 디렉토리에서 .jpg 파일 검색
jpg_files = glob.glob("images/*.jpg")
print(jpg_files)
baseFolder = '/lena_color.bmp' # 유니코드 에러로 백슬래시가
# 이스케이프 문자로 처리되므로 \\ 2개를 넣어야 오류를 피함
# 폴더 권한 이슈로 PIL 모듈 작업은 colab에서 진행하였음.
from PIL import Image
import os
from glob import glob
fileList=glob(baseFolder + '*')
import matplotlib.pyplot as plt
import numpy as np
img=Image.open(baseFolder).resize((100,200)) # 이미지를 열고 이미지크기를 재지정
imgArr=np.array(img)/255
# 이미지 데이터를 정규화하기 위한 코드로
# 이미지를 배열로 변환한 후에 각 픽셀 값을 255로 나누어 0과 1 사이의 범위로 조정
plt.imshow(imgArr)
plt.show()
-
이미지를 numpy 배열로 변환하면 이미지 데이터를 효율적으로 다룰 수 있습니다.
-
변환된 배열의 요소들을 255로 나누면 픽셀 값은 0과 1사이의 실수가 됩니다. 이런 정규화 과정은 이미지 처리에서 일반적으로 사용되는 전처리 단계 중 하나입니다.
- 더 적절한 범위로 데이터를 표현하고, 학습 모델의 안정성과 성능을 향상 시킬 수 있습니다.
imgArr
array([[[0.88235294, 0.53333333, 0.49411765], [0.89019608, 0.53333333, 0.48235294], [0.87843137, 0.5254902 , 0.4627451 ], ..., [0.72941176, 0.33333333, 0.35686275], [0.81960784, 0.44705882, 0.43137255], [0.89019608, 0.54901961, 0.4627451 ]], [[0.88235294, 0.53333333, 0.49019608], [0.89019608, 0.53333333, 0.47843137], [0.87843137, 0.52156863, 0.45882353], ..., [0.72941176, 0.33333333, 0.35686275], [0.82352941, 0.44705882, 0.43137255], [0.88627451, 0.5372549 , 0.45490196]], [[0.88235294, 0.5254902 , 0.4627451 ], [0.89019608, 0.52156863, 0.45098039], [0.88235294, 0.50980392, 0.42745098], ..., [0.76470588, 0.36078431, 0.36862745], [0.76470588, 0.38039216, 0.38039216], [0.59607843, 0.25490196, 0.3254902 ]], ..., [[0.36862745, 0.10980392, 0.23529412], [0.37647059, 0.11372549, 0.25098039], [0.45882353, 0.20392157, 0.34117647], ..., [0.39215686, 0.10588235, 0.23137255], [0.44313725, 0.14509804, 0.25490196], [0.56862745, 0.20784314, 0.27843137]], [[0.35686275, 0.10196078, 0.23921569], [0.37254902, 0.10588235, 0.24705882], [0.43137255, 0.18039216, 0.3254902 ], ..., [0.39215686, 0.10588235, 0.23529412], [0.49411765, 0.18039216, 0.27843137], [0.64313725, 0.25490196, 0.30588235]], [[0.35686275, 0.09803922, 0.23529412], [0.36470588, 0.10196078, 0.23921569], [0.40784314, 0.14901961, 0.29803922], ..., [0.41176471, 0.12156863, 0.25098039], [0.55294118, 0.23529412, 0.32156863], [0.69411765, 0.27843137, 0.31764706]]])
numpy의 shape는 함수가 아닌 속성이다.
if img.shape[2]==3 이라는 문장이 있다면 이 의미는, img배열의 세번째 차원 값이 3인지 확인하는 조건문이다. 즉, RGB로 되어 있는 자료인지 확인하는 조건문
일반적으로 컬러 이미지는 RGB채널을 사용하여 각 픽셀의 색상을 표현합니다. 이런 RGB이미지의 경우 shape속성은 (높이, 너비, 채널)형태의 튜플을 반환합니다.
이미지 헤더
이미지 헤더는 이미지 파일의 형식, 크기, 색 공간, 등의 정보를 담고 있습니다. 이미지 형식은 확장자로 정해지는 것이 아닌 이미지 헤더안의 정보로 정해지므로 확장자만을 믿고 작업해선 안됩니다.
jpg와 png
png는 RGB외에 투명도를 나타내는 알파채널에 대한 데이터를 추가로 갖고 있습니다. jpg는 주로 2차원 배열로 표현되며, png파일은 2차원 또는 3차원 배열로 표현될 수 있습니다.
이미지 자료 스케일링
위에서보았던 0~255의 값을 0~1사이 또는 0~127, -1~1 사이 값으로 조정하는 것을 스케일링 이라고 합니다. 스케일링을 하게 되더라도 이미지 자료이지만 이미지로 저장시 검정색으로 출력되어 numpy자료로만 보관할 수 있습니다.
plt.imshow(imgArr[:,:,0])
# 첫번째 : 은 이미지의 전체 행(row)
# 두번쨰 : 은 이미지의 전체 열(col)
# 세번째 0 은 이미지의 첫 번째 색상 채널을 선택
# RGB이미지의 경우 0은 빨간색, 1은 초록색 2는 초록색
# 즉 이미지의 빨간색 채널을 시각화하는 목적
plt.show()
plt.imshow(imgArr[:,:,1])
plt.show()
plt.imshow(imgArr[:,:,2])
plt.show()
# 밝기 조절
plt.figure(figsize=(20,10))
img=np.array(img)
result=[]
for x in range(10):
x=x+10
img=img+[x,x,x] # img+[[[x]]]
result.append(img)
re=np.hstack(result[:])
plt.imshow(re)
np.min(re), np.max(re)
WARNING:matplotlib.image:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
(10, 400)
이미지 numpy변환 저장
인공지능데이터셋은 일반적적으로
훈련x,훈련y,테스트x,테스트y로 저장됩니다.
때문에 jpg나 png같은 파일로 저장하지않고 npy,npz로 저장하고 불러옵니다.
np.save('/img.npy',imgArr)
np.load('/img.npy')
array([[[0.88235294, 0.53333333, 0.49411765], [0.89019608, 0.53333333, 0.48235294], [0.87843137, 0.5254902 , 0.4627451 ], ..., [0.72941176, 0.33333333, 0.35686275], [0.81960784, 0.44705882, 0.43137255], [0.89019608, 0.54901961, 0.4627451 ]], [[0.88235294, 0.53333333, 0.49019608], [0.89019608, 0.53333333, 0.47843137], [0.87843137, 0.52156863, 0.45882353], ..., [0.72941176, 0.33333333, 0.35686275], [0.82352941, 0.44705882, 0.43137255], [0.88627451, 0.5372549 , 0.45490196]], [[0.88235294, 0.5254902 , 0.4627451 ], [0.89019608, 0.52156863, 0.45098039], [0.88235294, 0.50980392, 0.42745098], ..., [0.76470588, 0.36078431, 0.36862745], [0.76470588, 0.38039216, 0.38039216], [0.59607843, 0.25490196, 0.3254902 ]], ..., [[0.36862745, 0.10980392, 0.23529412], [0.37647059, 0.11372549, 0.25098039], [0.45882353, 0.20392157, 0.34117647], ..., [0.39215686, 0.10588235, 0.23137255], [0.44313725, 0.14509804, 0.25490196], [0.56862745, 0.20784314, 0.27843137]], [[0.35686275, 0.10196078, 0.23921569], [0.37254902, 0.10588235, 0.24705882], [0.43137255, 0.18039216, 0.3254902 ], ..., [0.39215686, 0.10588235, 0.23529412], [0.49411765, 0.18039216, 0.27843137], [0.64313725, 0.25490196, 0.30588235]], [[0.35686275, 0.09803922, 0.23529412], [0.36470588, 0.10196078, 0.23921569], [0.40784314, 0.14901961, 0.29803922], ..., [0.41176471, 0.12156863, 0.25098039], [0.55294118, 0.23529412, 0.32156863], [0.69411765, 0.27843137, 0.31764706]]])
# npz는 x이미지와 y label값을 동시에 저장하는경우 사용한다.
x,y=[],[]
x.append(imgArr)
y.append('lena')
img2=Image.open('/cells.png').resize((20,30))
imgArr2=np.array(img2)/256
x.append(imgArr2)
y.append('cell')
# 반복문을 활용하여 split을 이용하여 for문을 돌릴수 도 있다.
np.savez('/imgsXY.npz',xData=x, yData=y)
/usr/local/lib/python3.10/dist-packages/numpy/lib/npyio.py:713: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray. val = np.asanyarray(val)
npzList=np.load('/imgsXY.npz',allow_pickle=True)
list(npzList)
['xData', 'yData']
xx,yy = npzList['xData'], npzList['yData']
np.shape(xx), np.shape(yy)
((2,), (2,))
plt.figure(figsize=(5,2))
for cnt, (x, y) in enumerate(zip(xx,yy)):
plt.subplot(1,len(xx),cnt+1) # 1개 행에 2개 열 작업, cnt+1번쨰
plt.imshow(x)
plt.title(y)
-
2개의 이미지, 30행, 30열, 3 채널
-
lena와 cell을 갖고있는 y
# !pip install tensorflow-cpu
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ Collecting tensorflow-cpu Downloading tensorflow_cpu-2.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (231.8 MB) [2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m231.8/231.8 MB[0m [31m5.4 MB/s[0m eta [36m0:00:00[0m [?25hRequirement already satisfied: absl-py>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (1.4.0) Requirement already satisfied: astunparse>=1.6.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (1.6.3) Requirement already satisfied: flatbuffers>=2.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (23.3.3) Requirement already satisfied: gast<=0.4.0,>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (0.4.0) Requirement already satisfied: google-pasta>=0.1.1 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (0.2.0) Requirement already satisfied: grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (1.54.0) Requirement already satisfied: h5py>=2.9.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (3.8.0) Requirement already satisfied: jax>=0.3.15 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (0.4.10) Requirement already satisfied: keras<2.13,>=2.12.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (2.12.0) Requirement already satisfied: libclang>=13.0.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (16.0.0) Requirement already satisfied: numpy<1.24,>=1.22 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (1.22.4) Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (3.3.0) Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (23.1) Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (3.20.3) Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (67.7.2) Requirement already satisfied: six>=1.12.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (1.16.0) Requirement already satisfied: tensorboard<2.13,>=2.12 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (2.12.2) Requirement already satisfied: tensorflow-estimator<2.13,>=2.12.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (2.12.0) Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (2.3.0) Requirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (4.5.0) Requirement already satisfied: wrapt<1.15,>=1.11.0 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (1.14.1) Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /usr/local/lib/python3.10/dist-packages (from tensorflow-cpu) (0.32.0) Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/local/lib/python3.10/dist-packages (from astunparse>=1.6.0->tensorflow-cpu) (0.40.0) Requirement already satisfied: ml-dtypes>=0.1.0 in /usr/local/lib/python3.10/dist-packages (from jax>=0.3.15->tensorflow-cpu) (0.1.0) Requirement already satisfied: scipy>=1.7 in /usr/local/lib/python3.10/dist-packages (from jax>=0.3.15->tensorflow-cpu) (1.10.1) Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (2.17.3) Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (1.0.0) Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (3.4.3) Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (2.27.1) Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (0.7.0) Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (1.8.1) Requirement already satisfied: werkzeug>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from tensorboard<2.13,>=2.12->tensorflow-cpu) (2.3.0) Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.13,>=2.12->tensorflow-cpu) (5.3.0) Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.13,>=2.12->tensorflow-cpu) (0.3.0) Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.13,>=2.12->tensorflow-cpu) (4.9) Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.13,>=2.12->tensorflow-cpu) (1.3.1) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorboard<2.13,>=2.12->tensorflow-cpu) (1.26.15) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorboard<2.13,>=2.12->tensorflow-cpu) (2022.12.7) Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorboard<2.13,>=2.12->tensorflow-cpu) (2.0.12) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2.21.0->tensorboard<2.13,>=2.12->tensorflow-cpu) (3.4) Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/local/lib/python3.10/dist-packages (from werkzeug>=1.0.1->tensorboard<2.13,>=2.12->tensorflow-cpu) (2.1.2) Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.13,>=2.12->tensorflow-cpu) (0.5.0) Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.13,>=2.12->tensorflow-cpu) (3.2.2) Installing collected packages: tensorflow-cpu Successfully installed tensorflow-cpu-2.12.0
텐서플로우를 사용해서 인공지능 데이터셋을 처리 가능(mnist)
import tensorflow as tf
mnist = tf.keras.datasets.mnist
aa = mnist.load_data()
aa # type이 tuple로 나온다. array 왼쪽에 ((가 있는것을 확인
# 훈련용 데이터로
# (x_train, y_train), (x_test, y_test) 구조로 되어있으며 y에는 label
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11490434/11490434 [==============================] - 0s 0us/step
((array([[[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], [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], [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], ..., [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], [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], [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]], [[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], [0, 0, 0, ..., 0, 0, 0]]], dtype=uint8), array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)), (array([[[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], [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], [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], ..., [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], [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], [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]], [[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], [0, 0, 0, ..., 0, 0, 0]]], dtype=uint8), array([7, 2, 1, ..., 4, 5, 6], dtype=uint8)))
(x_train, y_train), (x_test, y_test) = mnist.load_data()
xx=x_train[:5]
yy=y_train[:5]
for cnt, (x, y) in enumerate(zip(xx,yy)):
plt.subplot(1,len(xx),cnt+1) # 1개 행에 2개 열 작업, cnt+1번쨰
plt.imshow(x, cmap='gray')
plt.title(y)
댓글남기기