在keras中向图像分类器添加比图像更多的信息
Adding More information than a image to an image classifier in keras
我正在尝试用 keras 制作一个图像分类器来预测乳腺癌病例,直到这里我遇到了一些麻烦,因为它不是一个“简单”的分类器,我无法用 keras 的传统方法做到这一点。所以我试图添加更多的信息,而不仅仅是图像,比如数组 [image, age, density]。我是新手,所以我不知道它是不是 possible 或如何搜索正确的方法来做到这一点,我正在尝试这样做:
X = np.array(X) \ the image
y = np.array(y) \ an array with 1 or 0 (cancer or not)
z = np.array(z) \ the density of the breast
\ 所有数组都对应于相同的案例,例如 X[0]
是图像 y[0]
如果这种情况是否是癌症, z[0]
密度 os 这种情况
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) // i actually don't know how to give the information to the model
这是错误:
具有多个元素的数组的真值不明确。使用 a.any()
或 a.all()
Fit 不接受这样的参数。如果您查看 function definition,第一个参数是输入,第二个是目标预测,第三个是批量大小。
您应该做的是连接 X 和 z(以及任何其他信息),因为它们都是输入数据。例如
Xz = np.concatenate((X, z[..., np.newaxis]), axis=-1)
注意:z[..., np.newaxis]
获取一个大小为 [H, W]
的数组并将其设为 [H, W, 1]
,以便您可以将其与 X 连接,我假设 X 是形状为 [=] 的 RGB 图像14=]。如果是灰度,忽略这个,简单使用z
.
最终您想要的是具有维度 [H,W,C] 的输入,其中 C 是所有数据的维度,例如[红、绿、蓝、年龄、密度等]。在网络设计中将非图像信息(如年龄)注入到网络的最后一层(例如注入 Dense(128))可能更有意义
我正在尝试用 keras 制作一个图像分类器来预测乳腺癌病例,直到这里我遇到了一些麻烦,因为它不是一个“简单”的分类器,我无法用 keras 的传统方法做到这一点。所以我试图添加更多的信息,而不仅仅是图像,比如数组 [image, age, density]。我是新手,所以我不知道它是不是 possible 或如何搜索正确的方法来做到这一点,我正在尝试这样做:
X = np.array(X) \ the image
y = np.array(y) \ an array with 1 or 0 (cancer or not)
z = np.array(z) \ the density of the breast
\ 所有数组都对应于相同的案例,例如 X[0]
是图像 y[0]
如果这种情况是否是癌症, z[0]
密度 os 这种情况
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) // i actually don't know how to give the information to the model
这是错误:
具有多个元素的数组的真值不明确。使用 a.any()
或 a.all()
Fit 不接受这样的参数。如果您查看 function definition,第一个参数是输入,第二个是目标预测,第三个是批量大小。
您应该做的是连接 X 和 z(以及任何其他信息),因为它们都是输入数据。例如
Xz = np.concatenate((X, z[..., np.newaxis]), axis=-1)
注意:z[..., np.newaxis]
获取一个大小为 [H, W]
的数组并将其设为 [H, W, 1]
,以便您可以将其与 X 连接,我假设 X 是形状为 [=] 的 RGB 图像14=]。如果是灰度,忽略这个,简单使用z
.
最终您想要的是具有维度 [H,W,C] 的输入,其中 C 是所有数据的维度,例如[红、绿、蓝、年龄、密度等]。在网络设计中将非图像信息(如年龄)注入到网络的最后一层(例如注入 Dense(128))可能更有意义