hdf5 파일 열기 자동화안녕하십니까,
Tensorflow에서 hdf5 파일을 가져오고, 거기에 얼마나 많은 파일이 있는지 식별하고(커널 + 바이어스) 데이터 테이블로 저장한 다음 JMP에서 읽을 수 있고 사용할 수 있는 형식으로 변환하는 .jsl 스크립트를 만들려고 합니다. 지금까지 데이터 테이블을 여는 방법은 매우 수동적입니다. 나는 사용한다
Open( "filename.h5", {"list_of", "dataset_names"});
모든 데이터 세트 이름을 가져옵니다. 그러나 데이터 테이블로 작업할 수 있도록 이 수동 방식을 사용하고 있습니다(이것은 Keras 2계층 ANN의 경우이며 마지막 커널과 바이어스 계층은 다른 계층을 함께 연결합니다).
layer_0_bias = Data Table( "-model_weights-dense-dense-bias-0" ) << Get As Matrix();
layer_0_kernel = Data Table( "-model_weights-dense-dense-kernel-0" ) << Get As Matrix();
layer_1_bias = Data Table( "-model_weights-dense_1-dense_1-bias-0" ) << Get As Matrix();
layer_1_kernel = Data Table( "-model_weights-dense_1-dense_1-kernel-0" ) << Get As Matrix();
layer_2_bias = Data Table( "-model_weights-dense_2-dense_2-bias-0" ) << Get As Matrix();
layer_2_kernel = Data Table( "-model_weights-dense_2-dense_2-kernel-0" ) << Get As Matrix();
내가 하고 싶은 것은 데이터 테이블을 가져오고 저장하고 이름을 바꾸고 Keras 모델에 몇 개의 레이어가 있는지 이해하는 프로세스를 자동화하는 것입니다(데이터 테이블 수 / 2). 위에 표시된 수동 프로세스를 수행하지 않고도 데이터 테이블이 몇 개인지 이해하고 각 테이블의 이름을 개별적으로 변경할 수 있는 방법이 있습니까?
감사!
Re: hdf5 파일 열기 자동화Bob에게 미안하지만 지금 당장은 그런 샘플 코드나 개발할 시간이 없습니다.
브라이언
Re: hdf5 파일 열기 자동화안녕 브라이언,
JMP가 테이블 형식으로 직접 읽을 수 있는 Python에서 HDF5 파일을 생성하는 한 가지 방법만 찾았습니다... GUI 마법사가 로드할 HDF 구조의 하위 집합을 묻지 않음을 의미합니다.모든 코드를 붙여넣고 싶지는 않지만 기본 경로는 Pandas 데이터 프레임을 Numpy 재생으로 변환하고 이를 HDF5에 작성하는 것입니다.
하지만... JMP에서 이 .H5 파일을 여는 것은 터무니없이 느립니다.중간 크기 파일(131k 행 x 500열)의 경우 CSV로 저장된 동일한 데이터보다 약 10배 느립니다.
JMP가 직접 해석하고 열 수 있는 HDF5 파일에 테이블과 유사한 데이터를 저장하는 Python 코드 예제를 제공할 수 있습니까?또는 .JMP 파일을 작성하는 Python 모듈이 좋습니다.
Python 인터페이스는 JMP에서 열 수 있도록 Pandas 데이터 프레임을 .csv로 저장하는 것으로 보입니다... .csv가 가장 빠른 중개자이기 때문이 아니길 바랍니다.
감사,
- 밥
Re: hdf5 파일 열기 자동화불행히도 나는 여전히 이것에 대한 해결책을 찾지 못했습니다. 내 응용 프로그램의 주요 기능이 아니므로 더 이상 귀찮게하지 않습니다. 하지만 뭔가 부딪히면 확실히 알려줄게!
Re: hdf5 파일 열기 자동화이 문제에 대한 해결책을 확실히 찾으면 공유하겠습니다. 그러나 지금까지는 운이 없습니다.
Re: hdf5 파일 열기 자동화JMP는 .h5가 HDF5 파일의 유일한 확장자라고 가정합니다.이것은 표준으로 보이지만 .hdf5 및 .hdf가 대안으로 허용됩니다.JMP 15.2에서 .hdf5 및 .hdf 확장자를 지원하기 위해 파일 대화 상자 및 JSL 열기 명령을 얻는 방법에 대해 알아보겠습니다. 물론 16.0에 있을 것입니다.
브라이언 코르코란
JMP 개발
Re: hdf5 파일 열기 자동화실제로 여기에 또 다른 질문이 있습니다. JMP는 HDF5 파일이 'h5' 확장자를 사용할 것이라고 가정합니다. 내 파일의 확장자가 다른 경우(예: 'hdf5') JMP가 Open() 명령과 함께 해당 파일 유형을 사용하도록 강제할 수 있습니까? File Type() 인수는 HDF5에서 작동하지 않는 것 같습니다.Re: hdf5 파일 열기 자동화답장을 보내 주셔서 감사합니다. 적어도 나에게 HDF5 파일의 구조를 쿼리할 수 있다면 나머지는 직접 스크립트로 작성해 보겠습니다.Re: hdf5 파일 열기 자동화JMP는 현재 HDF5용으로 풍부한 JSL 기능 세트를 제공하지 않습니다.쿼리 테이블 이름에 JSL 지원을 추가하고 데이터 세트와 같이 병합하기 위한 공개 기능 요청이 있습니다.우리는 미래를 위해 이러한 추가를 고려하고 있습니다.이 외에도 도움이 된다고 생각되는 지원이 있는 경우 기술 지원에 전달하면 향후 작업의 우선 순위를 정하는 데 도움이 됩니다.
감사합니다. 지금은 더 이상 도움을 드릴 수 없어 죄송합니다.
브라이언 코르코란
JMP 개발
Re: hdf5 파일 열기 자동화안녕,
또한 hdf5 파일과 유사한 작업을 수행하려고 합니다. '데이터 세트'의 번호와 이름을 가져와 지능적인 작업을 수행합니다. 문서가 이 영역에서 매우 희박하다는 것을 발견하셨으리라 확신합니다. 이 작업을 수행하는 방법에 대해 문의하기 위해 jmp 지원에 이메일을 보냈습니다. 다시 듣게 되면 여기에 게시하겠습니다. 이 문제를 스스로 해결하게 된다면 솔루션을 공유해 주시겠습니까?
감사!Re: hdf5 파일 열기 자동화2024 토론, 유사한 주제:
hdf5 파일 열기에 대한 도움말
Re: hdf5 파일 열기 자동화JMP 17까지는 판다 데이터 프레임을 CSV 파일로 저장합니다. 내장된 Python 지원 기능이 있는 JMP 18은 판다 데이터 프레임에서 메모리에 데이터 테이블을 만들 수 있습니다. 18에서는 데이터 프레임을 반복하고 한 번에 JMP 데이터 테이블 열을 빌드해야 합니다.
곧 출시될 JMP 19 EA-5에서는 더 나은 데이터 프레임 지원이 제공됩니다.
HDF5 파일을 다루는 Python 패키지는 h5py입니다.
Re: hdf5 파일 열기 자동화저는 약간의 시간을 가지고 땜질했습니다. 여기 jmp 와 h5py를 사용하여 'Big Class.jmp'를 열고 'Big Class.h5' 파일을 만든 다음, 그로부터 .h5 파일에서 dt2 데이터 테이블을 만드는 Python 스크립트가 있습니다.
# File: h5_example.py
# Author: Paul R. Nelson
# Description: Example showing use of h5py and jmp packages to
# create a .h5 file from a JMP data table, and recreate the JMP
# table from the .h5 file. Note: the HDF5 file doesn't preserve
# column order so the new table comes back in alphabetic order
#
# Layout of my .h5 file - using a generic layout so it can always be easily read
# regardless of name.
# Other attrs could be added as needed.
# /table/ group 'table' has attrs['name'] = table name
# /table/col_name
# /table/...
# /table/nth_col_name
#
# /scripts/script_name
# ...
# /scripts/nth_script_name
#
import jmp
#from jmputils import jpip
#jpip('install', 'h5py')
import numpy as np
import h5py as h5
#callable function to use with h5py file.visit()
def printname(name):
print(name)
# Build a hdf5 file from JMP data table. HDF5 is like NumPy and each dataset
# must be homogeneous, so a JMP like table needs to be multiple datasets.
# To make it easy, a dataset per column.
def h5_from_dt(file_path, dt):
"""Build and save an .h5 file at at file_path/dt_name.h5 from dt"""
try:
f = h5.File( file_path + dt.name + '.h5', 'w')
h_tbl = f.create_group( 'table' ) # table data
h_script = f.create_group('scripts') # table scripts
h_tbl.attrs["name"] = dt.name
for col in dt:
if col.dtype == jmp.DataType.Character:
ds = h_tbl.create_dataset( col.name, shape=len(col), dtype=h5.string_dtype())
# I'm cheating - I'm saving the JMP data type so read can determine char type
ds.attrs['jtype'] = 'jmp_Character'
elif col.dtype == jmp.DataType.Numeric:
ds = h_tbl.create_dataset( col.name, shape=len(col), dtype='f8' )
ds.attrs['jtype'] = 'jmp_Numeric'
ds[:] = dt[col.name] # assign dt values to dataset
except Exception as err:
print(f'Error: {err}')
f.close()
return None
return f
def dt_from_h5(file_path):
"""Create a data table from an .h5 file turning datasets to JMP columns"""
f = h5.File(file_path, 'r')
if f and 'table' in f.keys():
print('A dt like h5.')
tbl = f['table']
cols = tbl.keys()
if cols:
print(cols)
col_name = list(cols)[0]
dt = jmp.DataTable('dt2', rows=len( tbl[ col_name ] ) )
for cname in cols:
c = tbl[cname]
print(c)
print(c.dtype)
# My cheat on knowing utf-8 char columns
if c.attrs['jtype'] and c.attrs['jtype'] == 'jmp_Character':
print('char col')
dt.new_column(cname, jmp.DataType.Character)
for x in range( len( c )):
# need to turn byte object back to utf-8 string
dt[cname][x] = c[x].decode('utf-8')
else:
dt.new_column(cname, jmp.DataType.Numeric)
dt[cname] = c
f.close()
return dt
else:
f.close()
return None
f.close()
return None
# open 'Big Class'
dt = jmp.open(jmp.SAMPLE_DATA + 'Big Class.jmp')
try:
# create 'Big Class.h5' file in my home directory
hdf = h5_from_dt(jmp.HOME, dt)
if hdf:
print(list(hdf.keys()))
hdf.visit(printname)
h_tbl = hdf['table']
print( f'Table Name: {h_tbl.attrs['name']}')
print( hdf['table/name'])
print( [x.decode('utf-8') for x in hdf['table/name'] ])
print( hdf[ 'table/weight'])
print( [x.item() for x in hdf['table/weight'] ] )
else:
print('Unable to create .h5 file from data table.')
except Exception as err:
print(f'Error: {err}')
finally:
if hdf:
hdf.close()
dt2 = dt_from_h5( jmp.HOME + 'Big Class.h5')
print(dt2)