###########################
# 라이브러리 로딩
import glob
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
###########################
# 이미지 읽어서 데이터 준비하기
paths = glob.glob('./notMNIST_small/*/*.png')
paths = np.random.permutation(paths)
독립 = np.array([plt.imread(paths[i]) for i in range(len(paths))])
종속 = np.array([paths[i].split('/')[-2] for i in range(len(paths))])
print(독립.shape, 종속.shape)
독립 = 독립.reshape(18724, 28, 28, 1)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)
###########################
# 모델을 완성합니다.
X = tf.keras.layers.Input(shape=[28, 28, 1])
H = tf.keras.layers.Conv2D(6, kernel_size=5, padding='same', activation='swish')(X)
H = tf.keras.layers.MaxPool2D()(H)
H = tf.keras.layers.Conv2D(16, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.MaxPool2D()(H)
H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(120, activation='swish')(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')
###########################
# 모델을 학습
model.fit(독립, 종속, epochs=10)
###########################
# 모델을 이용합니다.
pred = model.predict(독립[0:5])
pd.DataFrame(pred).round(2)
# 정답 확인
종속[0:5]
# 모델 확인
model.summary()
###########################
# 라이브러리 로딩
import glob
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
###########################
# 이미지 읽어서 데이터 준비하기
# 제가 직접 다운 받아서 써보려고 했습니다. (바뀐 부분)
paths = glob.glob('C:/Users/hs/Desktop/khs/notMNIST_small/notMNIST_small/*/*.png')
paths = np.random.permutation(paths)
독립 = np.array([plt.imread(paths[i]) for i in range(len(paths))])
print([paths[0].split('/')[-2]])
종속 = np.array([paths[i].split('/')[-2] for i in range(len(paths))])
print(독립.shape, 종속.shape)
(질문)
제 ide환경 파이참에서 실행보려고 했습니다.
제가 직접 다운받아서 해보려고 했는데 /*/* 위치 부분을 읽지 못하더라고요?
아래와 같이 실행을 해봤습니다.
종속[0:2]
이렇게 치면
array(['notMNIST_small', 'notMNIST_small'], dtype='<U14')
이런 결과가 나오는데 인덱스 순서상 notMNIST_small 폴더이름만 주구장창 가져오는거 같아서요.
인덱스를 늘리고 줄임을 반복한 결과
/*/* 이부분을 읽지 못하더라고요
[-2] 독립변수로 알파뱃 이름이고
[-1] 종속변수로 png파일인데
파이참 환경에서는 왜 안되는지가 의문입니다.
콜랩해서 하면 되는데 왜하냐고 물으시면..
종국에는 제가 파일을 다운받고 제 컴퓨터환경에서 시키기위해서는 알아야 하는 과정같아서 질문합니다.
OK~~~
근데요, 이미지 한장으로 판단을 하지 못하는 것도 있지 않나요?
예를 들면 병원에서 사용하는 X-ray 단층 사진이나 MRI 단층 사진은 여러장을 보고, 병(암)이 있는지? 없는지? 판단하는 것 같은거요.
이런 것들은 단순하게 CNN으로 되지는 않을 것 같은데요. 궁금해 지네요.
요즘 의료 분야 인공지능 벤처기업들이 많이 생겨나고, 실제로 병원에 활용되고 있기도 하던데 말이죠.
그런 것들은 아주 고급으로 어렵겠죠???
아~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
종속 변수 원핫인코딩을 안하신 것 같아요. 이미지 샘플 데이터의 경우는 원핫인코딩을 하지 않아도, sparse_ctegorical_crossentropy를 설정하면 모델 내부에서 원핫인코딩하여 결과를 냅니다.
다만, 이 경우 종속변수가 문자열로 되어있을 경우에는 사용할 수 없고, 숫자 인덱스로 변환이 되어있어야 합니다.