在Keras中为图像分类器添加图像以外的信息

我正在尝试使用Keras构建一个图像分类器来预测乳腺癌病例,之前遇到了一些麻烦,因为这不是一个“简单”的分类器,我无法用Keras的传统方法来实现。所以我想尝试添加比单纯的图像更多的信息,比如一个数组[图像,年龄,密度]。我在这方面是新手,不知道这是否可行,或者如何寻找正确的方法来实现,我尝试这样做:

X = np.array(X) \\ 图像
y = np.array(y) \\ 一个包含1或0的数组(癌症与否)
z = np.array(z) \\ 乳房密度

所有数组对应同一个病例,例如X[0]是图像,y[0]表示此病例是否为癌症,z[0]是此病例的密度

model = Sequential()
model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D((2,2)))
model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D((2,2)))
model.add(Flatten())
model.add(Dense(128, input_shape = X.shape[1:],activation = 'relu'))
model.add(Dense(2,activation = 'softmax'))
model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
model.fit(X,z,y, epochs = 20) // 我实际上不知道如何将信息传递给模型

这是我遇到的错误:

具有多个元素的数组的真值是模糊的。使用a.any()a.all()


回答:

Fit函数不接受这样的参数。如果你查看函数定义,第一个参数是输入,第二个是目标预测,第三个是批量大小。

你应该做的就是将X和z(以及任何其他信息)连接起来,因为它们都是输入数据。例如:

Xz = np.concatenate((X, z[..., np.newaxis]), axis=-1)

注意:z[..., np.newaxis]将一个大小为[H, W]的数组变成[H, W, 1],这样你就可以将其与X连接起来,我假设X是一个形状为[H,W,3]的RGB图像。如果是灰度图像,只需忽略这一点,直接使用z即可。

最终,你希望输入的维度为[H,W,C],其中C是所有数据的维度,例如[红色,绿色,蓝色,年龄,密度等]。在网络设计中,将非图像信息(如年龄)注入到网络的最后几层(例如Dense(128))可能更有意义。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注