我正在尝试使用Alexnet的tensorflow.contrib.slim实现来解决图像分类问题。如果我尝试在没有以下代码行的情况下创建图,则图创建成功。
valid_predicitions = tf.nn.softmax(model(tf_validation_dataset))
但是当我将此行添加到代码中时,出现以下错误
ValueError:变量alexnet_v2 / conv1 / weights已经存在, 不允许的。您是要在其中设置“ reuse = True”还是“ reuse = tf.AUTO_REUSE”? VarScope?
我也希望经过一定数量的迭代后,测试和验证数据的损失和准确性。我完整的代码如下
with graph.as_default():
tf_train_dataset = tf.placeholder(tf.float32, shape=(batchsize, height, width,channels))
tf_train_labels = tf.placeholder(tf.float32, shape=(batchsize, num_labels))
tf_validation_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)
def model(data):
with slim.arg_scope(alexnet.alexnet_v2_arg_scope()):
outputs, end_points = alexnet.alexnet_v2(data,num_classes=num_labels)
return outputs
logits = model(tf_train_dataset)
#calculate loss
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=tf_train_labels, logits=logits))
#optimization Step
optimizer = tf.train.AdamOptimizer(1e-4).minimize(loss)
#predictions for each dataset
train_predicitions = tf.nn.softmax(logits)
valid_predicitions = tf.nn.softmax(model(tf_validation_dataset))
答案 0 :(得分:0)
model()
是一个函数,每次调用时都会创建alexnet。第二次调用该函数时,错误消息会告诉您alexnet中的一个变量已经创建,这是事实。
您将必须重构代码,以便仅创建一次模型。我想这意味着模型的输入应该是一个未指定批次大小(None
)的占位符,以便您可以将其作为常规培训批次或完整的验证数据作为一个大批次传递给它。