2017-07-18 14 views
1

私は自分自身の画像の一部でVGGをトレーニングしています。 私は次のコードを持っている:私のディレクトリに基づいてKerasとVGGトレーニング:model.predict_generatorに従ったトレーニングと検証の例を "失う"のはなぜですか

Found 1500 images belonging to 2 classes. 
Found 500 images belonging to 2 classes 

を予想通り、私が得るこれの実行に続い

img_width, img_height = 512, 512 
top_model_weights_path = 'UIP-versus-inconsistent.h5' 
train_dir = 'MasterHRCT/Limited-Cuts-UIP-Inconsistent/train' 
validation_dir = 'MasterHRCT/Limited-Cuts-UIP-Inconsistent/validation' 
nb_train_samples = 1500 
nb_validation_samples = 500 
epochs = 50 
batch_size = 16 

def save_bottleneck_features(): 

     datagen = ImageDataGenerator(rescale=1./255) 

     model = applications.VGG16(include_top=False, weights='imagenet') 

     generator = datagen.flow_from_directory(
      train_dir, 
      target_size=(img_width, img_height), 
      shuffle=False, 
      class_mode=None, 
      batch_size=batch_size 
     ) 

     bottleneck_features_train = model.predict_generator(generator=generator, steps=nb_train_samples // batch_size) 

     np.save(file="UIP-versus-inconsistent_train.npy", arr=bottleneck_features_train) 

     generator = datagen.flow_from_directory(
      validation_dir, 
      target_size=(img_width, img_height), 
      shuffle=False, 
      class_mode=None, 
      batch_size=batch_size,  
     ) 

     bottleneck_features_validation = model.predict_generator(generator, nb_validation_samples // batch_size) 

     np.save(file="UIP-versus-inconsistent_validate.npy", arr=bottleneck_features_validation) 

       generator = datagen.flow_from_directory(
        validation_dir, 
        target_size=(img_width, img_height), 
        shuffle=False, 
        class_mode=None, 
        batch_size=batch_size,  
       ) 

       bottleneck_features_validation = model.predict_generator(generator, nb_validation_samples // batch_size) 

       np.save(file="UIP-versus-inconsistent_validate.npy", arr=bottleneck_features_validation) 

をそれから私は

train_data = np.load(file="UIP-versus-inconsistent_train.npy") 
train_labels = np.array([0] * 750 + [1] * 750) 
validation_data = np.load(file="UIP-versus-inconsistent_validate.npy") 
validation_labels = np.array([0] * 250 + [1] * 250) 

を実行し、データを検査

print("Train data shape", train_data.shape) 
print("Train_labels shape", train_labels.shape) 
print("Validation_data shape", validation_labels.shape) 
print("Validation_labels", validation_labels.shape) 

そして私は

Train data shape (1488, 16, 16, 512) 
Train_labels shape (1488,) 
Validation_data shape (496,) 
Validation_labels (496,) 

を取得し、これは変数である - 私はいくつかを「失う」のような代わりに、1500の訓練データ例と500個の検証例を有しているとそれがです。ときどき私が走るとき save_bottleneck_features(): 数字は戻ってきますが、それ以外は戻ってきません。プロセスに時間がかかると、多くのことが起こります。これについて再現可能な説明はありますか?おそらく破損した画像ですか?

答えて

1

それは簡単です:

1488 = (1500 // batch_size) * batch_size 
496 = (500 // batch_size) * batch_size 

あなたの損失は、整数の除算の不正確さから来ています。

+0

うーん...あまりにも簡単です:( – GhostRider

関連する問題