2016-08-30 6 views
2

私は列車のディレクトリまたはテストディレクトリのいずれかに自分のデータをダイビングできるPythonスクリプトを作成しています。スクリプトには、列車/試験の比率がどの程度であるかを示す比率を指定します。それに応じて、ファイルを訓練またはテストのいずれかにランダムに移動する必要があります。ファイルを列車のディレクトリまたはテストのディレクトリに移動するPythonスクリプト

ex。比率が0.5の場合、私のデータセットの半分は列車に、残りの半分はテストになります。

その他ex。比率が0.25の場合、75%のデータセットは列車内にあり、残りはテスト中です。

しかし、分割は毎回間違っているように見えます。私は84ファイル/ディレクトリを分離しようとしており、ゴールデン42/42分離を打つことはできません。それが重要な場合

import sys 
import os 
import shutil 
import numpy 
import random 


src = sys.argv[1] 
destination_data = sys.argv[2] 

src_abs = os.path.abspath(src) 
destination_data_abs = os.path.abspath(destination_data) 

src_files = os.listdir(src_abs) 


def copytree(src, dst, symlinks=False, ignore=None, split=0.5): 
    for item in os.listdir(src): 
     s = os.path.join(src, item) 
     d = os.path.join(dst, item) 
     d_test = os.path.join(dst, 'test', item) 
     d_train = os.path.join(dst, 'train', item) 

     print d_test 
     print d_train 
     minmax=0.0, 1.0 
     rand = random.uniform(*minmax) 
     print rand 
     if rand > split: 
      # Inserted into train 
      if os.path.isdir(s): 
       shutil.copytree(s, d_train, symlinks, ignore) 
       print "Copytree used! - TRAIN" 
      else: 
       shutil.copy2(s, d_train) 
       print "Copy 2 used! - TRAIN" 
     else: 
      # Inserted into test 
      if os.path.isdir(s): 
       shutil.copytree(s, d_test, symlinks, ignore) 
       print "Copytree used! - TEST" 
      else: 
       shutil.copy2(s, d_test) 
       print "Copy 2 used! - TEST" 

copytree(src_abs,destination_data_abs,True) 

コード... UNIXマシン上で実行されている。ここで

は、コードがありますか?

+1

あなたはそれが多く、多くの時間は、あなたがセンターで完璧な50/50分割と分布になるだろうしなかった場合は、ランダムにそれをやっているではなく、すべての実行がされるため、 50/50分割。私はあなたのファイルの量の長さである1と0のリストを生成することをお勧めします。あなたの 'split'によって1と0の割合が決定され、次にリストの順序がランダム化されます。 編集:@ user6770522の答えはこれのより良い実装をしています。 – perfect5th

答えて

3

シャッフルそれから分割というファイルのリストを分割比に関して取ることができます。

import os 
import numpy 

src_files = os.listdir(".") 
n_files = len(src_files) 

split_ratio = 0.5 
split_index = int(n_files * split_ratio) 

numpy.random.shuffle(src_files) 

print src_files[0:split_index] 
print src_files[split_index:] 

Flipping a coin 84 times will result in a "perfect" 42 heads/42 tails with a probability of 0.0868.

+0

ありがとうちょうど私が必要なもの:) – mom

関連する問題