我在tensorflow中使用tf.data.Dataset api时在tensorflow中训练了我的模型。我想演示我的代码的某些部分:
# This corresponds to loading the data using the tf.data.Dataset api...
names_train, detected_train, arousal_train, valence_train, liking_train, is_talking_train, images_train,\
iterator_train_all = load_train_sewa_tfrecords(filenames_train, train_batch_size)
names_devel, detected_devel, arousal_devel, valence_devel, liking_devel, is_talking_devel, images_devel, \
iterator_dev_all = load_devel_sewa_tfrecords(filenames_dev, test_batch_size)
现在,我已经看到训练和测试模型应该通过创建模型然后将其重新用于测试来完成。所以:
train_predictions, model_layers_name_shape = simpler_CNN(images_train, my_initializer, phase_train, dropout,
dopout_per_call_bool, mseed, reuse=False)
devel_predictions, _ = simpler_CNN(images_devel, my_initializer, phase_train, dropout, dopout_per_call_bool,
mseed, reuse=True)
现在,这是我的问题:创建模型时,我已经将训练数据集图像作为模型的输入传递。另一方面,在给定测试数据集的情况下从模型中提取某些特征时,tensorflow将要求我初始化训练迭代器,因为它假定我正在输入训练数据集(考虑到我如何创建模型“ ie我已经将训练图像作为输入传递给模型,其中重用为False”。
现在我尝试使用以下条件:
# the train_dataset will tell whether we are using the training or the testing dataset
train_dataset = tf.placeholder(dtype=tf.bool, shape=(), name='train_dataset')
images = tf.cond(train_dataset, return_images_train, return_images_devel)
# and then passing the images to the simpler_CNN while reuse is False:
train_predictions, model_layers_name_shape = simpler_CNN(images, my_initializer, phase_train, dropout,
dopout_per_call_bool, mseed, reuse=False)
但是,这不能解决问题,并且tensorflow仍然会要求我初始化训练迭代器。
此外,如果我同时运行初始化训练和测试迭代器,则在测试数据集上运行模型直到最后;现在,如果我尝试输入训练数据集,我将在训练迭代器上得到End of sequence
,就好像训练迭代器在输入测试数据集时也在运行一样(这种行为对我来说很奇怪)
最后,如何告诉模型我要加载测试数据集?另外,请注意,我可以运行devel_prediction
,并且tensorflow会知道我在说什么,但是在模型中运行隐藏层会造成问题。
答案 0 :(得分:0)
因此,当第一次创建模型时,我们假设模型层具有以下名称:
layer1/Relu:0
layer2/Relu:0
layer3/Relu:0
layer4/Relu:0
layer5/Relu:0
global_average_pooling:0
dense/BiasAdd:0
现在,在将模型重新用于测试数据集之后,tensorflow将创建另一个模型,但是权重将引用首次创建模型时创建的初始权重。当打印出重用模型的各层的名称时,我得到以下信息:
layer1_1/Relu:0
layer2_1/Relu:0
layer3_1/Relu:0
layer4_1/Relu:0
layer5_1/Relu:0
global_average_pooling_1:0
dense_1/BiasAdd:0
因此,我发现就我而言,我正在运行诸如layer5/Relu:0
之类的隐藏层。因此,这将要求我们使用训练数据集,这就是为什么tensorflow抱怨的原因。另一方面,我应该已经运行layer5_1/Relu:0
并解决了问题!