Tensorflow 如何运行手动编码的TF网络(无需培训)
我已经创建了一个小的TF网络,在那里我试图手动初始化所有的权重。我试图给它一个具体的输入(所有的),看看网络将产生什么。我这样做的原因是,我试图在R中复制一个TF模型,我有一些不同,我想通过尝试在TF和R中复制一个小模型来进行调试,并比较结果 因此,模型的输入被创建为:Tensorflow 如何运行手动编码的TF网络(无需培训),tensorflow,Tensorflow,我已经创建了一个小的TF网络,在那里我试图手动初始化所有的权重。我试图给它一个具体的输入(所有的),看看网络将产生什么。我这样做的原因是,我试图在R中复制一个TF模型,我有一些不同,我想通过尝试在TF和R中复制一个小模型来进行调试,并比较结果 因此,模型的输入被创建为: shape = (1, 3, 128, 64) x = np.ones(shape).astype(np.float32) x = np.transpose(x, (0, 2, 3, 1)) # Convert to NHWC
shape = (1, 3, 128, 64)
x = np.ones(shape).astype(np.float32)
x = np.transpose(x, (0, 2, 3, 1)) # Convert to NHWC
network = tf.convert_to_tensor(x, dtype=tf.float32)
网络非常简单,我们有:
Conv2d -> Batch Norm (BN) -> ELU activation -> Flatten -> Dense -> BN -> ELU
因此,我创建网络如下:
# w is a numpy array with the shape in (NHWC) format
network = tf.layers.conv2d(inputs=network, filters=32, kernel_size=(3, 3), padding='SAME', use_bias=False,
trainable=False, kernel_initializer=tf.constant_initializer(w))
# Batch normalization (The initialization variables are numpy arrays)
network = tf.nn.batch_normalization(x=network, mean=tf.convert_to_tensor(m), variance=tf.convert_to_tensor(v),
offset=tf.convert_to_tensor(b), scale=tf.convert_to_tensor(s), variance_epsilon=1e-8)
# Activation
network = tf.nn.elu(network)
# Flatten the network
network = tf.layers.flatten(network)
# Fully connected
network = tf.layers.dense(inputs=network, units=128, use_bias=False, trainable=False)
# Batch normalization
network = tf.nn.batch_normalization(x=network, mean=tf.convert_to_tensor(m), variance=tf.convert_to_tensor(v),
offset=tf.convert_to_tensor(b), scale=tf.convert_to_tensor(s), variance_epsilon=1e-8)
out = tf.nn.elu(network)
我想我已经正确地创建了网络。然而,现在我不知道如何运行这个。我看到的在线示例似乎是训练和tehn保存权重并重新加载保存的图表,但我想知道是否有一种简单的方法可以简单地运行向前传球(我不需要做任何训练,我已经硬编码了权重)并获得128维向量,以便验证输出
with tf.Session() as sess:
sess.run(tf.global_variables_initializer()) # to actually initialize variables
results = sess.run(out) # forward pass
results
现在是一个numpy数组,包含给定您在第一个代码块中创建的输入的网络输出。谢谢您的回答。这就是问题所在。。。我自己初始化了变量(我不想随机初始化),因为我想使用我提供的权重。那么我需要修改第一行吗?另外,它是否有一些特殊的标志在推理模式下运行(批处理规范通常在训练和推理中的工作方式不同)尝试这个,我得到了一个数组,这不是我所期望的。对不起,我想我没有真正注意到。初始值设定项将“运行”您提供的任何初始化,因此在本例中,由于您提供了常量,因此它不会是随机的。还要注意,您有一个完全连接的层,其中未指定初始值设定项,因此它将具有随机权重。