【发布时间】:2021-10-02 12:41:32
【问题描述】:
我正在使用 tensorflow 和 keras 迈出第一步,我创建了一个数据集,其中包含元组,其中嵌入了来自 VGG16 模型的图像作为数据和标签,它们是二进制多标签。例如,这是我的数据集中的一个元素的打印:
(<tf.Tensor: shape=(4096,), dtype=float32, numpy=
array([0.32185513, 0.14869851, 0.4276036 , ..., 0. , 0. ,
1.7438936 ], dtype=float32)>, <tf.Tensor: shape=(12,), dtype=int32, numpy=array([0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0])>)
我建立了以下模型:
inputs = Input(shape = (4096,), name = 'input_1')
dense_1 = Dense(units = 2048, name = "dense_1", activation = 'sigmoid')(inputs)
dense_2 = Dense(units = 2048, name = "dense_2", activation = 'sigmoid')(dense_1)
output = Dense(units = 12, name = "output", activation = 'sigmoid')(dense_2)
model = Model(inputs = inputs, outputs = output)
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = 'accuracy')
model.summary()
model.fit(train_ds, validation_data = val_ds)
当我尝试拟合模型时出现以下错误
ValueError:dense_1 层的输入 0 与该层不兼容:输入形状的预期轴 -1 具有值 4096,但接收到形状为 [4096, 1] 的输入
据我了解,模型期望一维张量作为输入,但得到一个二维张量,数据集中的数组是一维的,因此我不明白为什么它们作为二维张量从输入层传递。 任何帮助找出导致此错误的原因以及如何解决它?
编辑: 创建数据集的代码是:
embed_train = np.load("Desktop/DL projects/pawpularity/petfinder-pawpularity-score/VGG16_embed.npy")
print(embed_train.shape)
>>>(9912, 4096)
print(train_labels.shape)
>>>(9912, 12)
train_ds = tf.data.Dataset.from_tensor_slices((embed_train, train_labels))
train_ds = train_ds.shuffle(10000)
test_ds = train_ds.take(1000)
train_ds = train_ds.skip(1000)
val_ds = train_ds.take(2000)
train_ds = train_ds.skip(2000)
embed_train 和 train_labels 都是 numpy 数组,如您所见,我一共有 9912 个示例,每个示例包含 4096 个特征,需要针对每个标签进行分类(共 12 个标签)独立。
【问题讨论】:
-
你能告诉我们
train_ds.shape是什么吗? -
嗨,我编辑了问题并添加了数据集的代码,指定了我用来创建它的数组的形状
标签: python tensorflow keras deep-learning neural-network