首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:检查模型目标时出错:应为dense_4

ValueError:检查模型目标时出错:应为dense_4
EN

Stack Overflow用户
提问于 2017-08-21 22:47:27
回答 1查看 132关注 0票数 1

我有一个错误:

代码语言:javascript
复制
ValueError: Error when checking model target: expected dense_4 to have shape (None, 2) but got array with shape (12956, 1)

当我运行这个脚本时。

代码语言:javascript
复制
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])

我看到这个主题:ValueError: Error when checking model target: expected dense_4 to have shape (None, 4) but got array with shape (13252, 1),但我不知道如何在我的脚本中使用它。

提前感谢您的答复。

EN

回答 1

Stack Overflow用户

发布于 2017-08-22 00:37:18

目前你必须只有两个类,因为你的输出是期望的(None, 2)。但是,当使用两个类时,矩阵结构可以是

代码语言:javascript
复制
[[0,1],
 [1,0],
 [1,0]]

代码语言:javascript
复制
[[0],
 [1],
 [1]]

Sklearns LabelBinarizer将具有两个类的矩阵转换为一列0和1的列,其中0表示类1,1表示类2。所以你的输出层应该是

代码语言:javascript
复制
predictions = Dense(1, activation='sigmoid')(merged)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45800063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档