from nbdev.config import get_config
Corefunctions
4. Split in Training, Validation
Splitting kann anhand von vorher bekannten Indizes, dem Dateipfad oder anderen allgemeinen Funktion durchgeführt werden.
Splitting innerhalb einer Sequenzen sollte in der Praxis nur dann geschehen wenn eine einzige Sequenz vorhanden ist. Diese kann dann vorher manuell geteilt werden.
4.1 Splitting mit vorgegebenem Index
= get_config().config_file.parent
project_root = project_root / 'test_data/WienerHammerstein'
f_path = get_files(f_path,extensions='.hdf5',recurse=True).sorted() hdf_files
= IndexSplitter([1,2])
splitter 0],[1,2]]) test_eq(splitter(hdf_files),[[
= CreateDict()(hdf_files)
list_dict list_dict
[{'path': '/home/pheenix/Development/tsfast/test_data/WienerHammerstein/test/WienerHammerstein_test.hdf5'},
{'path': '/home/pheenix/Development/tsfast/test_data/WienerHammerstein/train/WienerHammerstein_train.hdf5'},
{'path': '/home/pheenix/Development/tsfast/test_data/WienerHammerstein/valid/WienerHammerstein_valid.hdf5'}]
test_eq(splitter(list_dict),splitter(hdf_files))
4.2 Splitting mit allgemeiner Funktion
Items, bei denen die definierte Funktion True
zurück gibt, werden den Validierungsdatensatz zugeordnet, der Rest dem Training. In diesem Fall wird nach dem Übergeordneten Ordnernamen gesucht.
= FuncSplitter(lambda o: Path(o).parent.name == 'valid')
splitter
splitter(hdf_files)0,1],[2]]) test_eq(splitter(hdf_files),[[
((#2) [np.int64(0),np.int64(1)], (#1) [2])
4.3 Splitting anhand des Parent-Folders
Splitter, der Explizit Training und Validierungsordner den Datensätzen zuordnet
ParentSplitter
ParentSplitter (train_name='train', valid_name='valid')
Split items
from the parent folder names (train_name
and valid_name
).
= ParentSplitter()
splitter 1],[2]]) test_eq(splitter(hdf_files),[[
test_eq(splitter(list_dict),splitter(hdf_files))
4.4 Percentage Splitter
PercentageSplitter
PercentageSplitter (pct=0.8)
Split items
in order in relative quantity.
= PercentageSplitter(0.7)
splitter #test_eq(splitter(hdf_files),[[0,1],[2]])
4.5 Apply To Dictionary
In Case of the Datablock API your items are a list of dictionaries. If you want to apply a Splitter to the path stored within you need a wrapper function.
ApplyToDict
ApplyToDict (fn, key='path')
= FuncSplitter(lambda o: Path(o).parent.name == 'valid')
splitter lambda: splitter(list_dict)) test_fail(
= ApplyToDict(splitter)
dict_splitter
test_eq(dict_splitter(list_dict),splitter(hdf_files)) dict_splitter(list_dict)
((#2) [np.int64(0),np.int64(1)], (#1) [2])
4.6 Valid Column
Using the ‘valid’ column of the Dataframe that has been created by a transformation.
from tsfast.data.core import CreateDict, ValidClmContains,DfHDFCreateWindows
= CreateDict([ValidClmContains(['valid']),DfHDFCreateWindows(win_sz=100+1,stp_sz=10,clm='u')])
tfm_src = tfm_src(hdf_files) src_dicts
valid_clm_splitter(src_dicts)
((#16780) [np.int64(0),np.int64(1),np.int64(2),np.int64(3),np.int64(4),np.int64(5),np.int64(6),np.int64(7),np.int64(8),np.int64(9)...],
(#1990) [16780,16781,16782,16783,16784,16785,16786,16787,16788,16789...])