Part3-19 save and load model
model.save로 저장하는 방법이 가장 간단
전체를 저장하는 방법
#옵티마이저 저장을 같이해서 바로 train으로 넘어갈수 있음
save_path = 'my_model.h5'
model.save(save_path,include_optimizer= True)
#모델 로드
model = tf.keras.models.load_model('my_model.h5')weight 저장
전이학습할때 유용 weight저장
model.save_weights('model_weight.h5')
#다시 로드
model.load_weights('model_weight.h5')모델구조를 json으로 저장
with open('model_architeture.json','w') as f:
f.write(model.to_json())
# 다시 로드
from tensorflow.keras.models import model_from_json
with open('model_architeture.json','r') as f:
model = model_from_json(f.read())h5모델 들여다보기
import h5py
model_file = h5py.File('my_model.h5','r+')
model_file.keys()
>>><KeysViewHDF5 ['model_weights']>
#weight는 없지만 구조 확인 가능
model_file['model_weights'].keys()conv2d 자세히 확인
# weight는 없지만 구조 확인 가능
model_file['model_weights'].keys()
>>> <KeysViewHDF5 ['activation_10', 'activation_11', 'activation_6', 'activation_7', 'activation_8', 'activation_9', 'conv2d_4', 'conv2d_5', 'conv2d_6', 'conv2d_7', 'dense_2', 'dense_3', 'dropout_3', 'dropout_4', 'dropout_5', 'flatten_1', 'input_2', 'max_pooling2d_2', 'max_pooling2d_3']>
# conv2d 자세히 weight확인가능
model_file['model_weights']['conv2d_4']['conv2d_4']['kernel:0']
>>> <HDF5 dataset "kernel:0": shape (3, 3, 3, 32), type "<f4">
#array로 변환하여 weight가져오기
weight = np.array(model_file['model_weights']['conv2d_4']['conv2d_4']['kernel:0'])
Part20 Pytorch - 01. dataset loader - torchvision.ImageFolder
폴더별로 불러와서 학습
tensor와 달리 먼저 위치를 알려주고 진행
grayscale이 안되는 이유
무조건적으로 RGB로 불러오게끔 되어 있어서 그레이스케일이 되지 않음
내부적으로 수정하고 진행해도 되나, 채널을 변경해서 진행
그레이스케일데이터 만질 일이 많지는 않음

데이터셋 만들기
torch.manual_seed(seed)
use_cuda = not no_cuda and torch.cuda.is_available()
device = torch.device("cuda" if use_cuda else "cpu")
train_dataset = datasets.ImageFolder(root=train_dir,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
]))
test_dataset = datasets.ImageFolder(root=test_dir,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
]))
train_loader = torch.utils.data.DataLoader(train_dataset,
batch_size=batch_size,
shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset,
batch_size=batch_size,
shuffle=False)예전과 비교 (참고 part2-13 7회)
예전에 pytorch 진행했을때는 다운로드를 받아서 데이터셋을 구성했는데
이번에는 root를 사용해서 폴더를 지정해서 불러올수 있었음
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('./datasets', train=True, download=True,
transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=(0.5,), std=(0.5))
])),
batch_size=batch_size,
shuffle=True)Part3-21. Pytorch - 02. dataset loader - custom dataset
커스텀이 가능한 데이터셋 구성
pytorch는 pillow나 numpy와 같은 함수로 데이터를 다룰 수 있음. 내부함수를 안써도 되서 편리함
#label가져오는 함수
def get_label(path):
lbl_name = os.path.basename(path).split('_')[-1].replace('.png','')
label = np.argmax(classes == lbl_name)
return label
Dataset class
메뉴얼에서 있는 내용 가져와 입맛대로 변형
class Dataset(Dataset):
def __init__(self, data_paths, transform=None):
self.data_paths = data_paths
self.transform = transform
def __len__(self):
return len(self.data_paths)
def __getitem__(self, idx):
# read image
path = self.data_paths[idx]
image = Image.open(path)
# get label
label = get_label(path)
if self.transform:
image = self.transform(image)
return image, label

데이터 세팅
앞전과 달리 Dataset로 데이터를 받음
train_loader = torch.utils.data.DataLoader(
Dataset(train_paths,
transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(
mean=[0.406],
std=[0.225])])
),
batch_size=batch_size,
shuffle=True,
**kwargs
)
test_loader = torch.utils.data.DataLoader(
Dataset(test_paths,
transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(
mean=[0.406],
std=[0.225])])
),
batch_size=batch_size,
shuffle=False,
**kwargs
)
'책&강의 학습 > 올인원 패키지 :딥러닝&인공지능' 카테고리의 다른 글
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 19회차 미션 (0) | 2020.07.17 |
|---|---|
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 18회차 미션 (0) | 2020.07.16 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 16회차 미션 (0) | 2020.07.14 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 15회차 미션 (0) | 2020.07.13 |
| [패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 14회차 미션 (0) | 2020.07.12 |
댓글