2016-10-05 14 views
4

編集:私はimage_dim_orderingに関連する問題を持っているCUDA 8.0を使用してこの問題を再現し、kerasためtensorflowバックエンドを使用したチタンX(パスカル)image_dim_ordering - 私はここで何が欠けていますか?

を使用していませんでした。 keras設定ファイルでimage_dim_ordering = 'th'を使用すると、すべて正常に動作しますが、 'tf'を使用すると、トレーニングは0.5精度から大幅に向上するわけではありません。

現在の私のライブ増強は非常にコストがかかり、テナーフローへの不必要な再形成をtheano dim order規則から削除したいと考えています。

私はここで間違っていることを理解するのを助けるかもしれない他の人の再生を可能にする簡単なコードで問題を作り直そうとしました。私はチャンネル、高さ、幅の違う慣習をよく知っています。少なくとも、私はそれを処理すると思います。

コンパクトな例で私の問題を完全に再現していませんでしたが(些細な作業のためかもしれません)、訓練の結果は繰り返し異なり、 'tf'の場合はずっと悪くなります。 。 注 - この再生コードで、ネットワークが行う必要があるのは、これは私の「〜/ .keras/keras.json」

{ 
    "floatx": "float32", 
    "epsilon": 1e-07, 
    "backend": "tensorflow", 
    "image_dim_ordering": "th" 
} 
で1.0

の完全なパッチから-1.0の離れて完全なパッチを伝えることです

私のテンソルフローバージョンは '' 0.11.0rc0 ''(それは0,10でも起こった) 私のケラスは今日の最新のgit pullです。

image_dim_orderingに 'th'を使用すると、3つの異なるシードに対して、エポック4で> 0.99の精度が得られます。私が手薄暗い順序のための「TF」を使用して 精度> = 0.9くらいしかエポック付近で、ログに以下を参照できるよう、最新の24

次は、問題を再現する必要があり、スタンドアロンのコードです:

「TF」ケースでは
from keras import backend as K 
import keras.optimizers 
from keras.layers import Convolution2D, MaxPooling2D 
from keras.layers import Activation, Dropout, Flatten, Dense, Input 
from keras.models import Model 
import numpy as np 

def make_model(input_dim_size): 
    if K.image_dim_ordering() == 'tf': 
     input_shape = (input_dim_size, input_dim_size,1) 
    else: 
     input_shape = (1, input_dim_size, input_dim_size) 
    img_input = Input(shape=input_shape) 

    x = Convolution2D(64,5,5,border_mode='same')(img_input) 
    x = Activation('relu')(x) 
    x = MaxPooling2D((2,2),strides=(2,2))(x) 

    x = Convolution2D(64, 5, 5, border_mode='same')(x) 
    x = Activation('relu')(x) 
    x = MaxPooling2D((2, 2), strides=(2, 2))(x) 

    x = Convolution2D(64, 5, 5, border_mode='same')(x) 
    x = Activation('relu')(x) 
    x = MaxPooling2D((2, 2), strides=(2, 2))(x) 

    x = Convolution2D(128, 5, 5, border_mode='same')(x) 
    x = Activation('relu')(x) 
    x = MaxPooling2D((2, 2), strides=(2, 2))(x) 

    x = Convolution2D(128, 5, 5, border_mode='same')(x) 
    x = Activation('relu')(x) 
    x = MaxPooling2D((2, 2), strides=(2, 2))(x) 

    x = Flatten()(x) 
    x = Dense(1024*2)(x) 
    x = Activation('relu')(x) 
    x = Dropout(0.5)(x) 

    x = Dense(1024 * 2)(x) 
    x = Activation('relu')(x) 
    x = Dropout(0.75)(x) 

    x = Dense(200)(x) 
    x = Activation('relu')(x) 
    x = Dropout(0.75)(x) 

    x = Dense(1,activation='sigmoid')(x) 

    model = Model(img_input, x) 

    learning_rate = 0.01 

    sgd = keras.optimizers.sgd(lr=learning_rate, momentum=0.9, nesterov=True) 

    model.summary() 

    model.compile(loss='binary_crossentropy', 
        optimizer=sgd, 
        metrics=['accuracy'] 
       ) 
    return model 

np.random.seed(456) 

def dummy_generator(mini_batch_size=64, block_size=100): 
    if K.image_dim_ordering() == 'tf': 
     tensor_X_shape = (mini_batch_size,block_size, block_size,1) 
    else: 
     tensor_X_shape = (mini_batch_size, 1, block_size, block_size) 

    X = np.zeros(tensor_X_shape, dtype=np.float32) 
    y = np.zeros((mini_batch_size, 1)) 

    while True: 
     for b in range(mini_batch_size): 
      X[b, :, :, :] = (float(b % 2) * 2.0) - 1.0 
      y[b, :] = float(b % 2) 
     yield X,y 

with K.tf.device('/gpu:2'): 
    K.set_session(K.tf.Session(config=K.tf.ConfigProto(allow_soft_placement=True, log_device_placement=False))) 
    MINI_BATCH_SIZE = 64 
    PATCH_SIZE = 100 
    model = make_model(PATCH_SIZE) 
    gen = dummy_generator(mini_batch_size=MINI_BATCH_SIZE,block_size=PATCH_SIZE) 
    model.fit_generator(gen, MINI_BATCH_SIZE*10, 
         100, verbose=1, 
         callbacks=[], 
         validation_data=None, 
         nb_val_samples=None, 
         max_q_size=1, 
         nb_worker=1, pickle_safe=False) 

これはトレーニングログです(と異なる種に非常に似ています):

Epoch 1/100 
640/640 [==============================] - 1s - loss: 0.6932 - acc: 0.4781  
Epoch 2/100 
640/640 [==============================] - 0s - loss: 0.6932 - acc: 0.4938  
Epoch 3/100 
640/640 [==============================] - 0s - loss: 0.6921 - acc: 0.5203  
Epoch 4/100 
640/640 [==============================] - 0s - loss: 0.6920 - acc: 0.5469  
Epoch 5/100 
640/640 [==============================] - 0s - loss: 0.6935 - acc: 0.4875  
Epoch 6/100 
640/640 [==============================] - 0s - loss: 0.6941 - acc: 0.4969  
Epoch 7/100 
640/640 [==============================] - 0s - loss: 0.6937 - acc: 0.5047  
Epoch 8/100 
640/640 [==============================] - 0s - loss: 0.6931 - acc: 0.5312  
Epoch 9/100 
640/640 [==============================] - 0s - loss: 0.6923 - acc: 0.5250  
Epoch 10/100 
640/640 [==============================] - 0s - loss: 0.6929 - acc: 0.5281  
Epoch 11/100 
640/640 [==============================] - 0s - loss: 0.6934 - acc: 0.4953  
Epoch 12/100 
640/640 [==============================] - 0s - loss: 0.6918 - acc: 0.5234  
Epoch 13/100 
640/640 [==============================] - 0s - loss: 0.6930 - acc: 0.5125  
Epoch 14/100 
640/640 [==============================] - 0s - loss: 0.6939 - acc: 0.4797  
Epoch 15/100 
640/640 [==============================] - 0s - loss: 0.6936 - acc: 0.5047  
Epoch 16/100 
640/640 [==============================] - 0s - loss: 0.6917 - acc: 0.4922  
Epoch 17/100 
640/640 [==============================] - 0s - loss: 0.6945 - acc: 0.4891  
Epoch 18/100 
640/640 [==============================] - 0s - loss: 0.6948 - acc: 0.5000  
Epoch 19/100 
640/640 [==============================] - 0s - loss: 0.6968 - acc: 0.4594  
Epoch 20/100 
640/640 [==============================] - 0s - loss: 0.6919 - acc: 0.5391  
Epoch 21/100 
640/640 [==============================] - 0s - loss: 0.6904 - acc: 0.5172  
Epoch 22/100 
640/640 [==============================] - 0s - loss: 0.6881 - acc: 0.5906  
Epoch 23/100 
640/640 [==============================] - 0s - loss: 0.6804 - acc: 0.6359  
Epoch 24/100 
640/640 [==============================] - 0s - loss: 0.6470 - acc: 0.8219  
Epoch 25/100 
640/640 [==============================] - 0s - loss: 0.4134 - acc: 0.9625  
Epoch 26/100 
640/640 [==============================] - 0s - loss: 0.2347 - acc: 0.9953  
Epoch 27/100 
640/640 [==============================] - 0s - loss: 0.1231 - acc: 1.0000 

そして「目」の場合のためのトレーニングログがある(と非常に見えます類似異なる種)上:

Epoch 1/100 
640/640 [==============================] - 3s - loss: 0.6891 - acc: 0.5594  
Epoch 2/100 
640/640 [==============================] - 2s - loss: 0.6079 - acc: 0.7328  
Epoch 3/100 
640/640 [==============================] - 2s - loss: 0.3166 - acc: 0.9422  
Epoch 4/100 
640/640 [==============================] - 2s - loss: 0.1767 - acc: 0.9969 

私はそれは疑わしい、それは(0)、tensorflowの場合には非常に高速だが、発電機にデバッグプリントを追加した後、呼び出されるように思わないことが判明します。 私はケラが何かを形作る必要がないと思っていたかもしれませんが、この量の再構成には2〜3秒で時間が掛かります

誰でも結果を再現しようとすると、私はここに行方不明、私は感謝する:)

+0

これは何だったのですか? – pplonski

+2

まだ、あまりにも多くのもので忙しかった@pplonski 最新のバージョンでこれをもう一度やり直してくれます。ありがとうございます。 – ZeDuS

+1

cuda 8.0とtitan x(pascal)を使用して問題を再現できませんでした。 – ZeDuS

答えて

-1

このスレッドは古いですが、私はまだ誰かが同じ問題に直面している場合に返信しています。

エラーは、Kerasバックエンドの設定が一貫していないために発生しています...

{ 
    "floatx": "float32", 
    "epsilon": 1e-07, 
    "backend": "tensorflow", 
    "image_dim_ordering": "th" 
} 

構成は、バックエンドとしてtensorflowを使用するが、Theano代わりのtensorflowの画像ディメンションの順序を使用します。 image_dim_orderingからtfに変更してください。問題が解決するはずです。

"image_dim_ordering": "tf" 
+0

質問の説明で共有しているスタンドアロンの再生コードを見ればわかるように、私はテンソルフローとテナノイメージのぼやけをよく知っています。これは、image_dim_orderingとkeras設定ファイルの誤解の問題ではありませんでした。 "K.image_dim_ordering()== 'tf':"で始まる数行を見て、コードがケラスの設定をサポートしていることを確認してください。 – ZeDuS

関連する問題