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循环下没有缩进,它可能会帮助其他可能想使用此代码的人。它已更新,感谢您的提示!