调用fit_generator时出错:python Tensorflow

时间:2018-03-13 09:50:06

标签: python tensorflow deep-learning conv-neural-network

我正在尝试制作可以从图像预测动物的CNN。以下是我正在使用的工具和python版本。 IDE:Spyder 3.2.6与Anaconda Tensorflow:版本1.2.1 Keras 2.1.4。 python 3.5

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import Conv2D

classifier = Sequential()
classifier.add(Convolution2D(32,3,3,input_shape=(64,64,3),activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(output_dim = 128,activation='relu'))
classifier.add(Dense(output_dim = 1,activation='sigmoid'))
classifier.compile(optimizer='adam', loss = 'binary_crossentropy', matrix = ['accuracy'])

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                    target_size=(64, 64),
                                                    batch_size=32,
                                                    class_mode='binary') 


test_set = test_datagen.flow_from_directory('dataset/test_set',
                                            target_size=(64, 64),
                                            batch_size=32,
                                            class_mode='binary')

classifier.fit_generator(training_set,
                         steps_per_epoch=(8000/32),
                         epochs=25,
                         validation_data=test_set,
                         validation_steps=(2000/32))

但是当我运行上面显示的fit_generator方法时,我得到以下错误

classifier.fit_generator(training_set,
                         steps_per_epoch=(8000/32),
                         epochs=25,
                         validation_data=test_set,
                         validation_steps=(2000/32))
Epoch 1/25
Traceback (most recent call last):

  File "<ipython-input-7-f76922930094>", line 5, in <module>
    validation_steps=(2000/32))

  File "C:\Users\fspathan\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)

  File "C:\Users\fspathan\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\keras\models.py", line 1276, in fit_generator
    initial_epoch=initial_epoch)

  File "C:\Users\fspathan\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)

  File "C:\Users\fspathan\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training.py", line 2224, in fit_generator
    class_weight=class_weight)

  File "C:\Users\fspathan\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training.py", line 1883, in train_on_batch
    outputs = self.train_function(ins)

  File "C:\Users\fspathan\AppData\Local\Continuum\anaconda3\envs\tensorflow\lib\site-packages\keras\backend\tensorflow_backend.py", line 2478, in __call__
    **self.session_kwargs)

TypeError: run() got an unexpected keyword argument 'matrix'

我已经完成了enogh谷歌并应用了所有必要的修复程序,但仍然没有进展。如果有人知道解决方案,这将是一个很好的帮助

非常感谢

1 个答案:

答案 0 :(得分:0)

在第

classifier.compile(optimizer='adam', loss = 'binary_crossentropy', matrix = ['accuracy'])

您传递参数matrix = ['accuracy']。这不是compile函数接受的任何参数,并且如文档所述,传递给此函数的额外参数将转发到后端,在TensorFlow的情况下转发到内部的run方法tf.Session对象。但是,matrix也不是该函数的预期参数,因此在尝试传递时它会失败。

我怀疑你打算做的是要求Keras计算准确度指标,在这种情况下你需要传递metrics参数,而不是matrix

classifier.compile(optimizer='adam', loss = 'binary_crossentropy', metrics = ['accuracy'])