2017-03-28 13 views
3

ケラス2へのアップグレード以来、私はResNet50を微調整しようとするとナノ損失を見ています。私がresnetの代わりに単一の畳み込みレイヤー(以下にコメントアウトしています)を使用すれば、損失と正確さは大丈夫です。私はKeras 2で変わったものを見逃していますか?以下のようmodel.summary()の始まりと終わりが見えResNet50ナノ損失ケラス2

from keras.applications.resnet50 import ResNet50 
from keras.layers import Flatten, Dense, Input, Conv2D, Activation, Flatten 
from keras.layers.pooling import MaxPooling2D 
from keras.models import Model 
from keras.optimizers import SGD 
import numpy as np 

inp = Input(batch_shape=(32, 224, 224, 3), name='input_image') 

### resnet 
modelres = ResNet50(weights="imagenet", include_top=False, input_tensor=inp) 
x = modelres.output 
x = Flatten()(x) 

### single convolutional layer 
#x = Conv2D(32, (3,3))(inp) 
#x = Activation('relu')(x) 
#x = MaxPooling2D(pool_size=(3,3))(x) 
#x = Flatten()(x) 
#x = Dense(units=32)(x) 
predictions = Dense(units=2, kernel_initializer="he_normal", activation="softmax")(x) 

model = Model(inputs=inp, outputs=predictions) 
model.compile(SGD(lr=.001, momentum=0.9), "categorical_crossentropy", metrics=["accuracy"]) 

# generate images of all ones with the same label 
def gen(): 
    while True: 
     x_data = np.ones((32,224,224,3)).astype('float32') 
     y_data = np.zeros((32,2)).astype('float32') 
     y_data[:,1]=1.0 
     yield x_data, y_data 

model.fit_generator(gen(), 10, validation_data=gen(), validation_steps=1) 

____________________________________________________________________________________________________ 
Layer (type)      Output Shape   Param #  Connected to 
==================================================================================================== 
input_image (InputLayer)   (32, 224, 224, 3)  0 
____________________________________________________________________________________________________ 
zero_padding2d_1 (ZeroPadding2D) (32, 230, 230, 3)  0 
____________________________________________________________________________________________________ 
conv1 (Conv2D)     (32, 112, 112, 64) 9472 

... 

avg_pool (AveragePooling2D)  (32, 1, 1, 2048)  0 
____________________________________________________________________________________________________ 
flatten_1 (Flatten)    (32, 2048)   0 
____________________________________________________________________________________________________ 
dense_1 (Dense)     (32, 2)    4098 
==================================================================================================== 

トレーニング出力は次のようになります。私はtheanoの代わりにtensorflowするバックエンドを切り替えると

Epoch 1/1 
10/10 [==============================] - 30s - loss: nan - acc: 0.0000e+00 - val_loss: nan - val_acc: 0.0000e+00 
+0

この「ナノ」は最初から表示されるのでしょうか、またはいくつかのバッチ/エポックの後に表示されますか? –

+0

最初から –

+0

入力のサイズは? –

答えて

2

すべてが正常に動作します。 theerの実装についての何かがケラス2で壊れたように見えます。

関連する問題