2017-02-16 55 views
0

我需要關於輸入以進行機器學習的幫助/意見。包含矩陣N×M的hdf5文件作爲keras機器學習的輸入

我有一個HDF5文件

combined.h5 

包含幾個數據集,其中每個數據集包含的矩陣4×125(4行和125列)

我一直在尋找關於如何輸入HDF5包含矩陣作爲機器學習輸入的文件,但沒有找到任何答案/例子足夠我參考。下面是我修改後的腳本

import numpy as np 
import h5py 
from keras.models import Sequential 
from keras.layers import Dense 

seed = 7 
np.random.seed(seed) 

dataset = h5py.File('combined.h5', 'r') #has 5 dataset 

X = dataset #input 
Y = ["A","CFL","SS","G","FF"] #output 

model = Sequential() 
model.add(Dense(125, input_dim=125, init='normal', activation='relu')) 
model.add(Dense(5, init='uniform', activation='sigmoid')) 

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 

model.fit(X, Y, nb_epoch=150, batch_size=10) 

scores = model.evaluate(X, Y) 

print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) 

我跑這個劇本,並得到像下面

我的問題是如何加載矩陣作爲機器學習的輸入數據的形式包含數據集的HDF5文件錯誤?

*附加問題,我想鏈接每個數據集的輸出。例如,數據集1的輸出數據爲「A」,數據集2的輸出數據爲「CFL」,依此類推...... 有沒有什麼適當的方法可以做到這一點,還是足夠用我在腳本中寫的內容?

謝謝你的幫助。

回答

0

這應該是每個命名數據集:

X = dataset['dataset_name'][:] #input 

找出你可以使用下面的腳本的數據集的名稱:

for key in dataset.keys(): 
    print key 

在這裏,你把全部數據集出來的文件。如果你不切片數據集,你只會得到一個指向h5py數據集對象的指針。使用切片運算符可以提取numpy數組。 (http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data

你只需要想象你的hdf5文件就像一個文件夾結構,你必須遍歷文件夾結構才能訪問你的數據。然後你可以使用分片來加載數據。

+0

我需要用hdf5文件中數據集的名稱來替換'dataset_name'嗎?你能詳細解釋一下嗎?例如,如果我有名爲'AA','BB'的數據集,是否需要像這樣寫 - > X = dataset ['AA'] [:]'用於數據集'AA'和'X =數據集[ 'BB'] [:]'數據集'BB'每個?或者是X = dataset ['dataset_name'] [:]'足以解決hdf5文件中的所有數據集? – Fang

+0

Dataset_name是實際數據集名稱(如AA)的佔位符。 –