1

Tensorflow でセマンティック セグメンテーションのモデルをトレーニングしました。64 個の新しい画像のセットの予測を実行したい (これらはグレースケール画像であるため、チャネル数は 1 です)。このために、2 つのメソッドを作成し、結果を比較しました (最初は、これらが同じ値を提供すると予想していました)。

  1. 方法 A: すべての画像を 4D 配列 (NB_IMAGES、ROWS、COLS、1) にロードします。4D 配列全体で予測を実行します。つまり、すべての画像を同時に (バッチ サイズ = 64) 実行します。

  2. 方法 B: 各画像の予測を個別に実行します。各画像は、形状 (1、ROWS、COLS、1) の 4D 配列としてロードされます。バッチ サイズ = 1。

メソッド A はクラスの 1 つに対してこの結果を提供しました: バッチサイズ = 64、およびメソッド B はこれを提供しました:バッチサイズ=1

メソッド B はメソッド B よりも多くの情報を提供します。さらに、メソッド B は float64 で予測を提供しますが、メソッド A は float32 配列を生成します。

コードは次のとおりです。

for i, x in enumerate(img_list):
        
  
        with Image.open(os.path.join(imgset_path, x)) as img_i:
            img_i = np.array(img_i.convert('L'))
        
        img_i_np = np.copy(img_i)
        img_i_np = np.expand_dims(img_i_np, -1) # Expand dims and normalize
        img_i_np = np.expand_dims(img_i_np, 0)
        img_i_np - img_i_np.astype('float64')/255.
        original[i,:,:,:] = np.copy(img_i_np[0,:,:,:])
        
        img_i_np_check = np.copy(img_i)
        img_i_np_check = np.expand_dims(img_i_np_check, -1)
        img_i_np_check = np.expand_dims(img_i_np_check, 0)
        img_i_np_check = img_i_np_check.astype('float64')/255.
                
        
        pred_i = model.predict(img_i_np_check)  # Method B
        preds_check[i,:,:,:] = pred_i[0,:,:,:]
        
        list_originals += [(x, i)]
     
        
    # Run predictions
    preds = model.predict(original) # Method A

モデルが同じで、batch_normalization が使用されておらず、データセットも同じであることを考えると、これらの予測の違いについて本当に迷っています。バッチサイズと予測の影響について知っている、または経験がある人はいますか?

4

0 に答える 0