[PYTHON] À propos de l'apprentissage avec Google Colab

Aperçu

Bien que google colab soit étonnamment pratique, il existe un problème en raison du fait que la lecture des données directement à partir de Google Drive est anormalement lente. (Données d'image dans mon cas) Je vais donc utiliser un fichier .p ou un fichier .h5 pour accélérer la lecture (aussi vite que la lecture depuis un appareil normal).

Flux global

Je pense que la méthode changera en fonction de la personne, mais dans mon cas

  1. Créez un fichier .txt qui récapitule les chemins de données pour la formation, la validation et le test, respectivement.
  2. Mettez le fichier .txt créé en 1. dans le fichier .p (probablement pas si rapide ici)
  3. Créez un fichier .h5 qui correspond au nom et aux données (.png cette fois) à l'aide du fichier .p créé précédemment.

Je vais le faire comme ça.

En raison de l'influence de la tâche (synthèse vocale) sur laquelle je travaille actuellement, j'écris également la sortie, mais pour les tâches de classification, etc., je pense qu'il est préférable de sauvegarder l'entrée et la sortie sous forme de taple sans les séparer.

1. Créez un fichier .txt

maketxt.py


import re
import glob
from sklearn.model_selection import train_test_split

def Create_txt(txt_path):
    #La condition est isfile car ce n'est que pour les images en mouvement=Je pense que c'est bien.
    fileList = [p for p in glob.glob('./image/**/', recursive=True) if re.search('/segment_', p)]
    #Les données sont 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')

Que fais tu

  1. Récupérez tous les chemins de données dans le répertoire
  2. Divisez le chemin acquis
  3. Enregistrez chaque (l'instruction try est écrite pour ne pas écraser) est.

2. Créez un fichier .p

À l'origine, le fichier .txt ne prend pas beaucoup de temps, vous pouvez donc l'ignorer.

p est un acronyme pour pickle. C'est un module Python qui permet de sauvegarder l'état d'un objet en sérialisant l'objet. (Je vous serais reconnaissant si vous pouviez voir d'autres pages pour le contenu spécifique.)

Dans ce cas, une grande quantité de chaînes de caractères (chemins de nom de fichier) est stockée dans un fichier. Je vais mettre le code ci-dessous, mais je viens de lire le fichier texte et de le mettre dans le fichier pickle.

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"))

3. Créez un fichier .h5

C'est la partie principale de ce temps.

Le fichier .h5 est l'un des fichiers binaires appelés HDF5, et vous pouvez avoir une structure hiérarchique dans un seul fichier. En d'autres termes, gérons les fichiers qui sont généralement effectués sur l'ordinateur dans un fichier énorme.

En stockant un grand nombre de fichiers image dans un fichier énorme, le temps de chargement des images est réduit. Surtout google colab est lent, donc je l'ai utilisé quand je ne l'avais pas. (La première époque était particulièrement serrée, cela a pris 10 minutes au lieu de 2 heures.)

Écrire des données

fileName = 'data.h5'
path = ('./data_file')
#lire les données de pickle
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

En tant que flux,

  1. Créez un fichier h5 et créez un répertoire pour l'entrée et un répertoire pour la sortie. (La structure des répertoires est gratuite, mais elle semble difficile à lire s'il y a trop de hiérarchies.)

  2. Enregistrez de plus en plus de données d'entraînement.

f.create_dataset('nom de fichier', data=Contenu des données)

Faire.

Lire les données

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()

En raison des spécifications, l'objet pour HDF5 est lu lorsque les données sont lues pour la première fois, donc

img_group = img_data[...]

Il est nécessaire de spécifier que le contenu de l'objet doit être récupéré comme dans. Le reste est comme d'habitude.

À la fin

Même si je cherchais "google colab loading is slow" etc., je n'ai pas trouvé d'article sur l'utilisation d'un fichier binaire, donc j'espère que vous connaîtrez son existence en lisant cet article.

Cela semble être plus profond que je ne le pensais, mais je n'ai pas beaucoup de temps et de motivation pour le rechercher correctement, donc si vous voulez en savoir plus, je pense que vous devriez regarder d'autres pages.

Recommended Posts

À propos de l'apprentissage avec Google Colab
Apprentissage automatique avec Pytorch sur Google Colab
Jouez avec Turtle sur Google Colab
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab Chapitres 1 à 6
Remarques sur avec
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Une histoire sur l'apprentissage automatique avec Kyasuket
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10 6-9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 5-7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 1-2
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3 ~ 5
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8 5-9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8 1-4
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 8
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 1-4
Apprenez avec Shogi AI Deep Learning sur Mac et Google Colab Utilisez Google Colab
Apprentissage en profondeur sur Mac et Google Colab mots appris avec Shogi AI
Cheet sheet lors du scraping avec Google Colaboratory (Colab)
Authentifier Google avec Django
"Orienté objet" appris avec python
Apprentissage automatique sur le surapprentissage
Conseils Google Colab Organiser
Apprendre Python avec ChemTHEATER 02
Apprendre Python avec ChemTHEATER 01
Une histoire de prédiction du taux de change avec Deep Learning
Un moyen facile de gratter avec Python en utilisant Google Colab
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
Parlez de l'amélioration du goulot d'étranglement des algorithmes d'apprentissage automatique avec Cython
Comment préparer l'environnement pour Google Colab avec le cours avancé d'apprentissage automatique de Coursera
Une histoire sur une erreur lors du chargement d'un modèle TensorFlow créé avec Google Colab localement
L'apprentissage automatique appris avec Pokemon
Essayez l'apprentissage en profondeur avec TensorFlow
Tester les logiciels embarqués avec Google Test
[Google Colab] Comment interrompre l'apprentissage, puis le reprendre
Extraits de code souvent utilisés lors de l'utilisation de BigQuery avec Google Colab
Apprentissage amélioré à partir de Python
Apprentissage automatique avec Python! Préparation
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
À propos de la matrice mixte d'apprentissage automatique
L'apprentissage le plus rapide sous Linux avec AWS
Démineur d'apprentissage automatique avec PyTorch
Une erreur survenue lors de l'apprentissage de YOLO avec Google Colab
Exemple de résumé de code lorsque vous travaillez avec des feuilles de calcul Google de Google Colab
Montez Google Drive avec google-drive-ocamlfuse
Accédez à Google Drive avec Python
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 3 Échelle collaborative de Google