Keras开始v3重新训练和微调错误

时间:2017-01-26 22:04:37

标签: python-2.7 keras

我试图让这里的例子(https://keras.io/applications/)工作几个小时,我有点疯狂,因为它不起作用......如果有人知道是什么,我会非常感激我可以试试!这是我的示例代码:

from keras.applications.inception_v3 import InceptionV3
from keras.preprocessing import image
from keras.models import Model
from keras.layers import Dense, GlobalAveragePooling2D
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Input

# dimensions of our images.
img_width, img_height = 150, 150

train_data_dir = '/Users/michael/testdata/train' #contains two classes cats      and dogs
validation_data_dir = '/Users/michael/testdata/validation' #contains two classes cats and dogs

nb_train_samples = 1200
nb_validation_samples = 800
nb_epoch = 50

# create the base pre-trained model
base_model = InceptionV3(weights='imagenet', include_top=False)

# add a global spatial average pooling layer
x = base_model.output
x = GlobalAveragePooling2D()(x)
# let's add a fully-connected layer
x = Dense(1024, activation='relu')(x)
# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)

# this is the model we will train
model = Model(input=base_model.input, output=predictions)

# first: train only the top layers (which were randomly initialized)
# i.e. freeze all convolutional InceptionV3 layers
for layer in base_model.layers:
    layer.trainable = False

# compile the model (should be done *after* setting layers to non-trainable)
#model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=    ['accuracy'])

# prepare data augmentation configuration
train_datagen = ImageDataGenerator(
        rescale=1./255)#,
 #       shear_range=0.2,
 #       zoom_range=0.2,
 #       horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=16,
    class_mode='categorical'
)

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=16,
    class_mode='categorical'
)

print "start history model"
history = model.fit_generator(
    train_generator,
    nb_epoch=nb_epoch,
    samples_per_epoch=128,
    validation_data=validation_generator,
    nb_val_samples=nb_validation_samples) #1020

当我运行此操作时,出现以下错误。我已经尝试将枕头更新到最新版本,但仍然是同样的错误:

Found 1199 images belonging to 2 classes.
Found 800 images belonging to 2 classes.
start history model
Epoch 1/50
Traceback (most recent call last):
  File "/Users/michael/PycharmProjects/keras-imaging/fine-tune-v3-new-    classes.py", line 75, in <module>
    nb_val_samples=nb_validation_samples) #1020
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line     1508, in fit_generator
    class_weight=class_weight)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line     1261, in train_on_batch
    check_batch_dim=True)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line     985, in _standardize_user_data
    exception_prefix='model target')
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line     113, in standardize_input_data
    str(array.shape))
ValueError: Error when checking model target: expected dense_2 to have shape     (None, 200) but got array with shape (16, 2)
Exception in thread Thread-1:
Traceback (most recent call last):
  File     "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/pytho    n2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File     "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/pytho    n2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/training.py", line     409, in data_generator_task
    generator_output = next(generator)
  File "/usr/local/lib/python2.7/site-packages/keras/preprocessing/image.py", line 691, in next
    target_size=self.target_size)
  File "/usr/local/lib/python2.7/site-packages/keras/preprocessing/image.py", line     191, in load_img
    img = img.convert('RGB')
      File "/usr/local/lib/python2.7/site-packages/PIL/Image.py", line 844, in             convert
        self.load()
          File "/usr/local/lib/python2.7/site-packages/PIL/ImageFile.py", line     248, in     load
        return Image.Image.load(self)
    AttributeError: 'NoneType' object has no attribute 'Image'

1 个答案:

答案 0 :(得分:5)

预期的类数与实际类之间存在不匹配,从错误消息中可以清楚地看出:

ValueError: Error when checking model target: expected dense_2 to have shape     (None, 200) but got array with shape (16, 2)

在此您指定您的模型需要200个类,但实际上您只有2个。

# and a logistic layer -- let's say we have 200 classes
predictions = Dense(200, activation='softmax')(x)

将其更改为predictions = Dense(2, activation='softmax')(x)

相关问题