Keras(+;tensorflow)不能仅用部分序列数据进行预测
我现在正在使用Keras和tensorflow构建一个立体匹配网络。该网络具有以下结构: 在对整个网络进行培训之后,我需要对其进行测试。然而,培训阶段和测试阶段是完全不同的。我得把模型分成两部分。第一个部分是CNN+连接,它只需要运行一次,而完全连接的部分(实际上我在测试时将其修改为完全转换形式)需要使用稍微不同的输入运行d次,其中d从100到228不等 第一部分网络代码:Keras(+;tensorflow)不能仅用部分序列数据进行预测,tensorflow,deep-learning,keras,Tensorflow,Deep Learning,Keras,我现在正在使用Keras和tensorflow构建一个立体匹配网络。该网络具有以下结构: 在对整个网络进行培训之后,我需要对其进行测试。然而,培训阶段和测试阶段是完全不同的。我得把模型分成两部分。第一个部分是CNN+连接,它只需要运行一次,而完全连接的部分(实际上我在测试时将其修改为完全转换形式)需要使用稍微不同的输入运行d次,其中d从100到228不等 第一部分网络代码: # input image dimensions img_rows, img_cols = X1.shape[0], X
# input image dimensions
img_rows, img_cols = X1.shape[0], X1.shape[1]
input_shape = (img_rows, img_cols, 1)
X1 = X1.reshape(1, img_rows, img_cols, 1)
X2 = X2.reshape(1, img_rows, img_cols, 1)
# number of conv filters to use
nb_filters = 112
# CNN kernel size
kernel_size = (3,3)
left_branch = Sequential()
left_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same', input_shape=input_shape))
left_branch.add(Activation('relu'))
left_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same'))
left_branch.add(Activation('relu'))
left_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same'))
left_branch.add(Activation('relu'))
left_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same'))
left_branch.add(Activation('relu'))
right_branch = Sequential()
right_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same', input_shape=input_shape))
right_branch.add(Activation('relu'))
right_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same'))
right_branch.add(Activation('relu'))
right_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same'))
right_branch.add(Activation('relu'))
right_branch.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1], border_mode='same'))
right_branch.add(Activation('relu'))
merged = Merge([left_branch, right_branch], mode='concat')
cnn = Sequential()
cnn.add(merged)
我将从训练阶段获得的权重加载到网络的第一部分,并尝试对其进行预测
def load_cnn_weights(filepath):
f = h5py.File(filepath, mode='r')
weights = []
for i in range(1, 9):
weights.append(f['model_weights/conv2d_{}/conv2d_{}/kernel:0'.format(i, i)][()])
weights.append(f['model_weights/conv2d_{}/conv2d_{}/bias:0'.format(i, i)][()])
f.close()
return weights
weights = load_cnn_weights("/home/users/shixin.li/segment/Lecun_stereo_rebuild/weights.hdf5")
cnn.set_weights(weights)
output_cnn = cnn.predict([X1, X2])
我已经通过调用get\u weights()
函数检查了权重是否已成功读取,并且是否能够适应网络。X1和X2不是零,它们是标准化灰度图像矩阵。我甚至试着在预测之前编辑网络。但是结果output\u cnn
给出的都是零
我没有看到任何人有这个问题,我被困了两天。真正让我困惑的是,输入和权重都不是零,那么为什么结果是零呢?如果你能帮忙,我会非常感激的 您可能想尝试使用来找出所有零输出的op的确切输入是什么,以了解发生了什么。您可能想尝试使用来找出所有零输出的op的确切输入是什么,以了解发生了什么