Python Keras VGG16 ValueError:“;生成器的输出应该是tuple,但得到';无&引用;我怎样才能解决这个问题?
我正在用我自己的数据集微调VGG16预训练模型,该数据集有两个类别。当我尝试运行Python Keras VGG16 ValueError:“;生成器的输出应该是tuple,但得到';无&引用;我怎样才能解决这个问题?,python,deep-learning,keras,Python,Deep Learning,Keras,我正在用我自己的数据集微调VGG16预训练模型,该数据集有两个类别。当我尝试运行model.fit\u generator()时,出现以下错误: 生成器的输出应该是元组(x,y,sample_weight)或(x,y)。找到:无。 但是flow\u from\u directory查找我可以从终端看到的图像 我怎样才能解决这个问题?请帮忙 from keras.datasets import cifar10 from keras.utils import * from keras.optimiz
model.fit\u generator()
时,出现以下错误:
生成器的输出应该是元组(x,y,sample_weight)或(x,y)。找到:无。
但是flow\u from\u directory
查找我可以从终端看到的图像
我怎样才能解决这个问题?请帮忙
from keras.datasets import cifar10
from keras.utils import *
from keras.optimizers import SGD
from keras.layers import Input,Dense
from keras.preprocessing.image import ImageDataGenerator
import cv2
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(
'dataset/train',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'dataset/evaluate',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
from keras.models import Model
import numpy as np
input_shape=(64, 64, 3)
inputs = Input(shape=(64,64,3))
base_model = VGG16(weights=None, include_top=False, input_shape=input_shape)
x = base_model.output
x = Flatten(input_shape=model.output_shape[1:])(x)
x = Dense(256, activation='relu')
x = Dropout(0.5)(x)
x = Dense(1, activation='sigmoid')(x)
x = Dense(1, activation='sigmoid', name='predictions')(x)
model = Model(base_model.input , x)
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics= ['accuracy'])
#train_generator = np.asarray(train_generator)
#validation_generator = np.asarray(validation_generator)
validation_generator = np.expand_dims(validation_generator, axis=2)
validation_generator = np.expand_dims(validation_generator, axis=3)
model.fit_generator(
train_generator,
steps_per_epoch=2000,
epochs=50,
validation_data=validation_generator,
validation_steps=800)
对于两个类来说,您的顶层似乎是错误的。换成
x = Dense(1, activation='sigmoid', name='predictions')(x)
model = Model(base_model.input , x)
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics= ['accuracy'])
我还建议您在“headless”VGG16基础上添加一个完整的分类器模型,如您在Keras示例代码中看到的:
top_model = Sequential()
top_model.add(Flatten(input_shape=model.output_shape[1:]))
top_model.add(Dense(256, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(1, activation='sigmoid'))
您还应该从此行中删除classes
参数:
base_model = VGG16(weights=None, include_top=False, input_shape=input_shape, classes=2)
请参见此处VGG16应用程序的Keras文档:欢迎使用SO。请提供您的完整代码,以便其他人可以看到您所做的事情并可以帮助您。另外,请尽量设置问题的格式,尤其是代码块。感谢您提供完整的代码。为了使它更清晰,请删除任何不必要的代码行,特别是注释掉的代码。谢谢帮助!现在我有一个错误:“ValueError:validation_数据应该是一个元组
(val_x,val_y,val_sample_weight)
或(val_x,val_y)
。找到:[[]]确定。将(x)
添加到此行:x=densite(256,activation='relu')
。其中一行是冗余的:x=densite(1,activation='sigmoid')(x)
添加层解决了问题。我猜我在代码中打错了一行。谢谢你的帮助!成功了!但我还不到15岁(代表:)