Obwohl Google Colab überraschend praktisch ist, gibt es ein Problem, dass das Lesen von Daten direkt von Google Drive ungewöhnlich langsam ist. (Bilddaten in meinem Fall) Ich werde also eine .p- oder eine .h5-Datei verwenden, um das Laden zu beschleunigen (so schnell wie das Lesen von einem normalen Gerät).
Ich denke, die Methode wird sich je nach Person ändern, aber in meinem Fall
Ich werde es so machen.
Aufgrund des Einflusses der Aufgabe (Sprachsynthese), an der ich gerade arbeite, schreibe ich auch die Ausgabe, aber für Klassifizierungsaufgaben usw. halte ich es für besser, die Eingabe und Ausgabe als Taple zu speichern, ohne sie zu trennen.
maketxt.py
import re
import glob
from sklearn.model_selection import train_test_split
def Create_txt(txt_path):
#Die Bedingung ist isfile, da sie nur für bewegte Bilder gilt=Ich denke wahr ist in Ordnung.
fileList = [p for p in glob.glob('./image/**/', recursive=True) if re.search('/segment_', p)]
#Daten sind 8:1:1
train_data, val_test_data = train_test_split(fileList, test_size=0.2)
val_data, test_data = train_test_split(val_test_data, test_size=0.5)
try:
train_txt = os.path.join(txt_path, 'train.txt')
with open(train_txt, mode='x') as f:
for train_path in train_data:
f.write(train_path.rstrip('/') + '\n')
val_txt = os.path.join(txt_path, 'val.txt')
with open(val_txt, mode='x') as f:
for val_path in val_data:
f.write(val_path.rstrip('/') + '\n')
test_txt = os.path.join(txt_path, 'test.txt')
with open(test_txt, mode='x') as f:
for test_path in test_data:
f.write(test_path.rstrip('/') + '\n')
except FileExistsError:
print('already exists')
Was machst du
Ursprünglich nimmt die TXT-Datei nicht viel Zeit in Anspruch, sodass Sie sie überspringen können.
p ist eine Abkürzung für Gurke. Es ist ein Python-Modul, das den Status eines Objekts durch Serialisierung des Objekts speichern kann. (Ich würde mich freuen, wenn Sie andere Seiten für den spezifischen Inhalt sehen könnten.)
In diesem Fall wird eine große Anzahl von Zeichenfolgen (Dateinamenpfaden) in einer Datei gespeichert. Ich werde den folgenden Code einfügen, aber ich habe nur die Textdatei gelesen und in die Pickle-Datei eingefügt.
import pickle
video_list =list()
txt_path = os.path.join(txt_path)+ '.txt'
with open(txt_path, 'r') as textFile:
for line in textFile:
line = line.replace('\n', '')
video_list.append(line)
pickle.dump(data_dict, open('txt_file.p', "wb"))
Dies ist der Hauptteil dieser Zeit.
Die .h5-Datei ist eine der Binärdateien mit dem Namen HDF5, und Sie können eine hierarchische Struktur in einer Datei haben. Mit anderen Worten, lassen Sie uns die Dateien, die normalerweise auf dem Computer erstellt werden, in einer großen Datei verwalten.
Durch das Speichern einer großen Anzahl von Bilddateien in einer großen Datei wird die Zeit zum Laden von Bildern reduziert. Besonders Google Colab ist langsam, deshalb habe ich es verwendet, als ich es nicht hatte. (Die erste Epoche war besonders eng, es dauerte 10 Minuten statt 2 Stunden.)
fileName = 'data.h5'
path = ('./data_file')
#Pickle-Daten lesen
dataFileList = pickle.load(open('txt_file.p', "rb"))
train_list=dataFileList['train']
count =0
with h5py.File(fileName, "w") as f:
f.create_group('/train')
f.create_group('/train/input')
f.create_group('/train/output')
for train in train_list:
data = pull_item(train)
f.create_dataset('/train'+data[0].strip('.'), data=data[2])
f.create_dataset('/train'+data[1].strip('.'), data=data[3])
f.flush()
if count %100 ==0:
print(count)
count +=1
Als Fluss,
Erstellen Sie eine h5-Datei und erstellen Sie ein Verzeichnis für die Eingabe und ein Verzeichnis für die Ausgabe. (Die Verzeichnisstruktur ist frei, scheint aber bei zu vielen Hierarchien schwer zu lesen zu sein.)
Speichern Sie immer mehr Trainingsdaten.
f.create_dataset('Dateiname', data=Inhalt der Daten)
Machen.
import h5py
from PIL import Image
import numpy as np
image = ('/train/input/images_18')
output = ('/train/output/images_18.csv')
with h5py.File('data.h5', mode = 'r') as data:
img_data = data[image]
img_group = img_data[...]
img_group = img_group.astype(np.float64)
feature = data[output]
feature_data = feature[...]
data.close()
Aufgrund der Spezifikationen wird das Objekt für HDF5 beim ersten Lesen der Daten gelesen
img_group = img_data[...]
Es muss angegeben werden, dass der Inhalt des Objekts wie in abgerufen werden soll. Der Rest ist wie gewohnt.
Selbst wenn ich nach "Das Laden von Google Colab ist langsam" usw. gesucht habe, habe ich keinen Artikel über die Verwendung einer Binärdatei gefunden. Ich hoffe, Sie werden die Existenz anhand dieses Artikels erkennen.
Es scheint tiefer zu sein, als ich dachte, ich würde es nachschlagen, aber ich habe nicht viel Zeit und Motivation, es richtig nachzuschlagen. Wenn Sie also mehr wissen möchten, sollten Sie sich andere Seiten ansehen.
Recommended Posts