Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 如何运行手动编码的TF网络(无需培训)_Tensorflow - Fatal编程技术网

Tensorflow 如何运行手动编码的TF网络(无需培训)

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

我已经创建了一个小的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
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数组,包含给定您在第一个代码块中创建的输入的网络输出。

谢谢您的回答。这就是问题所在。。。我自己初始化了变量(我不想随机初始化),因为我想使用我提供的权重。那么我需要修改第一行吗?另外,它是否有一些特殊的标志在推理模式下运行(批处理规范通常在训练和推理中的工作方式不同)尝试这个,我得到了一个数组,这不是我所期望的。对不起,我想我没有真正注意到。初始值设定项将“运行”您提供的任何初始化,因此在本例中,由于您提供了常量,因此它不会是随机的。还要注意,您有一个完全连接的层,其中未指定初始值设定项,因此它将具有随机权重。