Python 2.7 Keras初始v3再培训和微调错误

Python 2.7 Keras初始v3再培训和微调错误,python-2.7,keras,Python 2.7,Keras,我试着让这个例子()在几个小时后就开始工作了,我有点发疯了,因为它不工作了。。。如果有人知道我可以尝试什么,我会非常感激的!这是我的示例代码: from keras.applications.inception_v3 import InceptionV3 from keras.preprocessing import image from keras.models import Model from keras.layers import Dense, GlobalAveragePooling2

我试着让这个例子()在几个小时后就开始工作了,我有点发疯了,因为它不工作了。。。如果有人知道我可以尝试什么,我会非常感激的!这是我的示例代码:

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
当我运行此命令时,我得到以下错误。我已尝试将pillow更新为最新版本,但仍然存在相同的错误:

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'
#
找到了1199张属于2类的图像。
找到了800张属于2类的图片。
启动历史模型
纪元1/50
回溯(最近一次呼叫最后一次):
文件“/Users/michael/PycharmProjects/keras imaging/fine-tune-v3-new-classes.py”,第75行,在
nb_val_样本=nb_验证_样本)#1020
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第1508行,在fit_生成器中
等级重量=等级重量)
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第1261行,在批量生产线中
检查(批次尺寸=真)
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第985行,在用户数据中
异常(前缀为“模型目标”)
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第113行,标准化输入数据
str(array.shape))
ValueError:检查模型目标时出错:预期密集_2具有形状(无,200),但获得具有形状(16,2)的数组
线程1中的异常:
回溯(最近一次呼叫最后一次):
文件“/usr/local/ceral/python/2.7.9/Frameworks/python.framework/Versions/2.7/lib/pytho n2.7/threading.py”,第810行,位于引导程序内部
self.run()
文件“/usr/local/ceral/python/2.7.9/Frameworks/python.framework/Versions/2.7/lib/pytho n2.7/threading.py”,第763行,正在运行
自我目标(*自我参数,**自我参数)
文件“/usr/local/lib/python2.7/site packages/keras/engine/training.py”,第409行,在数据生成器任务中
发电机输出=下一个(发电机)
文件“/usr/local/lib/python2.7/site packages/keras/preprocessing/image.py”,下一页第691行
目标大小=自身。目标大小)
文件“/usr/local/lib/python2.7/site packages/keras/preprocessing/image.py”,第191行,在load\u img中
img=img.convert('RGB')
转换文件“/usr/local/lib/python2.7/site packages/PIL/Image.py”,第844行
self.load()
文件“/usr/local/lib/python2.7/site packages/PIL/ImageFile.py”,第248行,已加载
返回Image.Image.load(self)
AttributeError:“非类型”对象没有属性“图像”

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

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=densite(2,activation='softmax')(x)

非常感谢,这就是问题所在!由于它是二进制分类,所以最好也将激活更改为“sigmoid”。如果只有一个输出节点,sigmoid就有意义。有两个输出节点,softmax是正确的选择@我的视力很好。我忘了提那件事。我认为逻辑层最好的代码行应该是predictions=density(1,activation='sigmoid')(x)您能更新代码的缩进吗?我看到for循环下没有缩进,它可能会帮助其他可能想使用此代码的人。它已更新,感谢您的提示!