我有下面的代码,其中我试图将一组22个大小为(96,96,96)的3D图像与其相应的测试值(显示为输入值)50(例如)结合起来。换句话说,我希望一个图像的测试值为50,而另一个图像的测试值为80。我可以通过CNN运行我的图像,但我被困在连接层上
我尝试将两个输入值都更改为1D张量,对于图像和测试值分别为(884736,1)和(22,1),并尝试将它们连接起来,但我收到了错误添加的层必须是类层的实例。发现:张量(concatenate_15/concat:0),shape=(884758,1),dtype=float64)
我已经研究这个问题超过2天了,如果能够解决这个问题,我将不胜感激。多谢各位
batch_size = 2
input_tmt = tf.convert_to_tensor(np.asarray([50., 50., 50., 50., 50., 50., 50., 50., 50., 50., 50.,
80., 80., 80., 80., 80., 80., 80., 80., 80., 80., 80.]).reshape([22, 1]))
input_images = tf.convert_to_tensor(image.flatten().reshape([884736, 1]))
print(type(input_images), input_images.shape, type(input_tmt), input_tmt.shape)
model = Sequential()
model.add(Conv3D(32, [3, 3, 3], padding='same', activation='relu',
input_shape=[96, 96, 96, 1]))
model.add(Conv3D(32, [3, 3, 3], padding='same', activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2), padding='same'))
model.add(Dropout(0.5))
model.add(Conv3D(64, [3, 3, 3], padding='same', activation='relu'))
model.add(Conv3D(64, [3, 3, 3], padding='same', activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2), padding='same'))
model.add(Dropout(0.5))
model.add(Conv3D(128, [3, 3, 3], padding='same', activation='relu'))
model.add(Conv3D(128, [3, 3, 3], padding='same', activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2), padding='same'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(concatenate([input_images, input_tmt], axis = 0))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
adam = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999)
model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=batch_size, epochs=15)
eval = model.evaluate(x_test, y_test, batch_size=batch_size)
print(eval)
目前没有回答
相关问题 更多 >
编程相关推荐