Python ValueError:检查模型目标时出错:应为稠密\u 4
我有一个错误:Python ValueError:检查模型目标时出错:应为稠密\u 4,python,keras,Python,Keras,我有一个错误: ValueError: Error when checking model target: expected dense_4 to have shape (None, 2) but got array with shape (12956, 1) 当我运行这个脚本时 def image_text_model(image_features, text_features, n_classes): # fine-tune the last layer image_fea
ValueError: Error when checking model target: expected dense_4 to have shape (None, 2) but got array with shape (12956, 1)
当我运行这个脚本时
def image_text_model(image_features, text_features, n_classes):
# fine-tune the last layer
image_features = Input(shape=image_features.shape[1:], dtype='float32')
n_text_features = text_features.shape[1]
text_features = Input(shape=text_features.shape[1:], dtype='float32')
# text model
x_text = Dense(256, activation='elu', kernel_regularizer=l2(1e-5))(text_features)
x_text = Dropout(0.5)(x_text)
# image model
x_img = Dense(256, activation='elu')(image_features)
x_img = Dropout(0.5)(x_img)
x_img = Dense(256, activation='elu')(x_img)
x_img = Dropout(0.5)(x_img)
merged = concatenate([x_img, x_text])
predictions = Dense(n_classes, activation='softmax')(merged)
model = Model(inputs=[image_features, text_features], outputs=[predictions])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
# dev
df = pd.read_csv(os.path.join(data_dir, 'amazon_products_dev.csv'))
dev_image_list = df['image_file'].values
dev_text = df['title'].values.tolist()
dev_categories = df['product_category'].values
# encode labels (binary labels)
encoder = LabelBinarizer()
train_labels = encoder.fit_transform(train_categories)
dev_labels = encoder.transform(dev_categories)
# get features from a pre-trained resnet model
vec = ResNetVectorizer(batch_size=500,
image_dir=image_dir,
use_cache=True,
cache_dir=cache_dir)
train_image_features = vec.transform(train_image_list)
dev_image_features = vec.transform(dev_image_list)
# get text features
tfidf = TfidfVectorizer(ngram_range=(1,1), stop_words='english', max_features=5000)
train_text_features = tfidf.fit_transform(train_text)
dev_text_features = tfidf.transform(dev_text).toarray()
# fine-tune the last layer
n_classes = encoder.classes_.shape[0]
model = image_text_model(train_image_features, train_text_features, n_classes)
data_gen = sparse_batch_generator(train_image_features, train_text_features, train_labels, shuffle=True)
steps_per_epoch = int(np.ceil(train_image_features.shape[0]/32.))
model.fit_generator(data_gen,
steps_per_epoch=steps_per_epoch,
epochs=50,
validation_data=[[dev_image_features, dev_text_features], dev_labels])
我看到这个话题:
但我不知道如何在我的脚本中使用它
提前感谢您的回答。当前您必须只有两个类,因为您的输出预期为
(无,2)
。然而,当使用两个类时,矩阵结构可以是
[[0,1],
[1,0],
[1,0]]
或
SklearnsLabelBinarizer
将包含两个类的矩阵转换为一列零和一。第一类为0,第二类为1。所以你的输出层应该是
predictions = Dense(1, activation='sigmoid')(merged)
当前,您必须只有两个类,因为您的输出需要
(无,2)
。然而,当使用两个类时,矩阵结构可以是
[[0,1],
[1,0],
[1,0]]
或
SklearnsLabelBinarizer
将包含两个类的矩阵转换为一列零和一。第一类为0,第二类为1。所以你的输出层应该是
predictions = Dense(1, activation='sigmoid')(merged)
很难说,我不知道为什么要使用一个fit生成器,它接受一个变量,而不是一个生成器函数名。我们还需要看看生成器函数,我不知道为什么要使用一个fit生成器,它接受一个变量,而不是一个生成器函数名。我们还需要查看发电机的功能