앞으로 네트워크를 학습시키기 위해서 pre-trained 모델을 사용할 일이 자주 있을 것이다.

 

보통 pre-trained 모델에서 파라미터를 'h5' 혹은 'hdf5'로 저장하게 되는데,

이를 적절히 활용하고, 이해하는데 도움이 될 수 있는 예제를 준비해보았다.

 

[h5py 설치] pip install h5py

[업그레이드] pip install h5py --upgrade

=================================시작========================================

import h5py
import numpy as np

file = h5py.File('test_hdf5.hdf5','w') # 저장하고 싶은 파일명을 입력한다. 'w'는 파일을 쓸 때 사용하는 옵션이다 (기존에 존재한다면 덮어쓰게 된다).

#file.create_group("a") # 폴더를 생성하는 방법 중 하나이다. 하지만 아래의 방법과 중복하여 사용이 불가능하기에 좀 더 직관적이고 사용하기 편리한 아래 방법만을 사용한다. 이렇게도 사용할 수 있다는 것만 알고 넘어가자.

#file.create_group("b/c")

#file["a"].create_group("d")
#file["b"].create_group("f")

g = file.create_group("a") # create_group을 사용하여 파일에 'a'라는 폴더를 생성한다.
g2 = file.create_group("b")
g.create_group("d") # 'a' 폴더 안에 'd' 라는 폴더를 생성한다.
g.create_group("sub") # 'a' 폴더 안에 'sub' 라는 폴더를 생성한다.
g2.create_group("c")
g2.create_group("f")

print(file.keys()) # keys를 사용하여 'test_hdf5.hdf' 파일의 디렉토리를 확인한다.
print(g.keys())
print(g2.keys())

g2.attrs['message'] = "Hello Python!!" # attrs를 사용하여 속성을 추가할 수 있다. 속성의 자료형은 튜플(tuple)타입이다.
g2.attrs['dt'] = "2021.12.20"

print(g2.attrs['message'])

print(g2.attrs.keys())


print('속성의 키와 값을 출력해보기') # print를 통해 위의 속성이 잘 적용되었는지 확인할 수 있다.
for key in g2.attrs.keys():
    print(f'{key}:{g2.attrs[key]}') # 변수를 출력할 때에는 따옴표 앞에 'f'를 잊지말자.

print('속성의 값만 출력해보기')
for value in g2.attrs.values():
    print(f'{value}')

print('속성의 자료형 체크 출력해보기')
for value in g2.attrs.items():
    print(f'자료형:{type(value)}, 출력:{value}')

for key, value in g2.attrs.items():
    print(f'{key}:{value}')

dt = g.create_dataset("test", data=np.arange(30)) # 'a' 폴더 안에 test라는 새로운 폴더와 데이터 셋을 생성한다.

print(f'dt: {dt.name}')
print(f'dt: {dt.shape}')
print(f'dt: {dt.dtype}')
print(f'dt: {dt[1:10]}')

dt[1] = 100
dt[2:10] = -1.5

print(dt[:]) # 'test' 데이터셋이 잘 입력되었는지 확인해보자.

g['sub2'] = np.arange(15) # 'a' 폴더 안에 'sub2' 라는 새로운 폴더와 데이터 셋을 생성한다.
c=file['/a/sub2'] # 데이터셋에 접근할 수 있다.
print(c)

c=g2['/a/test']
print(c)

file.close()

==================================끝=========================================

 

단순한 코드로써 기초적인 'hdf5' 파일을 다루고 이해하기에는 충분할 것으로 예상한다.

혹시 나중에 추가로 필요한 내용이 있다면 새롭게 글을 작성해 보겠다.

 

아래에는 출처가 되는 사이트와 'hdf viewer' 다운로드 링크를 첨부하겠다.

 

Source: https://ddolcat.tistory.com/715

 

[Python] 파이썬 h5py 설치 및 사용방법 알아보기 : HDF5 예제

Hierarchical Data Format 는 매우 크고 복잡한 대용량 데이터를 저장하기 위한 파일 형식(HDF4, HDF5)입니다. 파일 확장자는 hdf5 또는 h5입니다. HDF5의 가장 큰 특징은 빅데이터 처리시 유용하며, 빠른 입출

ddolcat.tistory.com

HDF viewer: https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfview-3.1/bin/

 

Index of /ftp/HDF5/releases/HDF-JAVA/hdfview-3.1/bin

 

support.hdfgroup.org

 

'개인공부 > Python' 카테고리의 다른 글

im2col 함수  (0) 2022.01.18
Pytorch - 텐서 조작하기  (0) 2022.01.18
RuntimeError (CUDA)  (0) 2022.01.13
Python, Pytorch, Torchvision 다운그레이드  (0) 2022.01.11
(1) 변수와 리스트  (0) 2021.12.14

변수

흥미롭게도 파이썬에서는 변수타입을 따로 지정해줄 필요가 없다.

 

변수에 값이 아닌 문자를 넣을 수도 있다.

문자열을 더하는 건 정말 쇼킹하다

리스트

배열과 동일한 의미이다. 하지만 리스트는 간편하게 배열을 다룰 수 있는 기능을 지원한다.

 

배열의 길이를 len() 함수로 다루게 되고, 배열 접근은 C++와 동일하다.

remove() 메소드를 통해서 배열에서 원하지 않는 값을 자유롭게 제거할 수 있다.

그럼 반대로 배열에 추가하는 메소드는 append()와 insert()이다.

append는 원소 마지막에 추가하게 된다.
insert는원하는 위치에 값을 추가할 수 있게 해준다. 리스트.insert(입력할 index, 값), 

리스트를 더하는 방법은 +기호 혹은 extend() 메소드를 사용할 수 있다.

'개인공부 > Python' 카테고리의 다른 글

im2col 함수  (0) 2022.01.18
Pytorch - 텐서 조작하기  (0) 2022.01.18
RuntimeError (CUDA)  (0) 2022.01.13
Python, Pytorch, Torchvision 다운그레이드  (0) 2022.01.11
파라미터 저장을 위한 예제 (hdf5)  (0) 2021.12.20

+ Recent posts