2017-12-20 13 views
0

私は深い学習についてUdacityのオンラインコースを見ていました。その概念はnot_Mnistデータセットの単純な分類でした。すべてのことがあまりにも良く説明されていましたが、コードの一部と少し混乱しています私に手を差し伸べる時間があれば感謝します! たとえば、'notMNIST_large.tar.gz' fileがあります。 最初に.tar.gzを削除し、ルートはroot = notMNIST_largeです。その後、このname.Ifとディレクトリではない、我々は'notMNIST_large.tar.gz' fileからサブフォルダを抽出し、私は少し混乱し場所ですがすでに存在する場合、我々は確認...python os.path.dir example

num_classes = 10 
np.random.seed(133) 

def maybe_extract(filename, force=False): 
    root = os.path.splitext(os.path.splitext(filename)[0])[0] # remove .tar.gz 
    if os.path.isdir(root) and not force: 
    # You may override by setting force=True. 
    print('%s already present - Skipping extraction of %s.' % (root, filename)) 
    else: 
    print('Extracting data for %s. This may take a while. Please wait.' % root) 
    tar = tarfile.open(filename) 
    sys.stdout.flush() 
    tar.extractall(data_root) 
    tar.close() 
    data_folders = [ 
    os.path.join(root, d) for d in sorted(os.listdir(root)) 
    if os.path.isdir(os.path.join(root, d))] 
    if len(data_folders) != num_classes: 
    raise Exception(
     'Expected %d folders, one per class. Found %d instead.' % (
     num_classes, len(data_folders))) 
    print(data_folders) 
    return data_folders 

train_folders = maybe_extract(train_filename) 
test_folders = maybe_extract(test_filename) 

可能であれば私はのための説明をしたいと思いますこの部分

data_folders = [ 
    os.path.join(root, d) for d in sorted(os.listdir(root)) 
    if os.path.isdir(os.path.join(root, d))] 
    if len(data_folders) != num_classes: 
    raise Exception(
     'Expected %d folders, one per class. Found %d instead.' % (
     num_classes, len(data_folders))) 
+2

あなたのご質問はありますか? – Zinki

+0

私が上で言ったように私は少し混乱しています。だから可能ならば、コードの説明が欲しい。 –

答えて

2

これは、サブディレクトリのリストを収集し、予想される番号があることをチェックします。

data_folders = [thing(d) for d in something() if predicate(d)] 

something()の結果をループし、predicateTrueであるため、それらの項目を収集しリスト内包です。これらのエントリにthing()を適用し、結果リストをdata_foldersに収集します。

ここで、somethingは現在のディレクトリにあるファイルのリストであり、predicateはそのアイテムがディレクトリであること(通常ファイルではない)をチェックします。 thingos.path.join(root,d)です。つまり、抽出したエントリの前にrootディレクトリを追加します。

この場合、コードはサブディレクトリの数がクラスの数と同じであることを確認します(おそらく各サブディレクトリにはクラスが含まれています)。