繁体   English   中英

Tensorflow:形状必须等于等级,但对于tf.norm来说形状必须为4和1,

[英]Tensorflow : Shapes must be equal rank, but are 4 and 1, for tf.norm

我试图在conv2d层中找到所有过滤器的标准。 请在下面找到相同的代码

conv1 = tf.layers.conv2d(
                         inputs=input_layer,
                         filters=32,
                         strides=(1, 1),
                         kernel_size=[3, 3],
                         padding="valid",
                         activation=tf.nn.relu,
                         use_bias=True,
                         kernel_regularizer=tf.nn.l2_loss,
                         bias_regularizer=tf.nn.l2_loss,
                         name="conv1")

var = [v for v in tf.trainable_variables() if "conv1" in v.name]
print(tf.norm(var,axis=4))

形状必须相等,但必须为4和1。将形状0与其他形状合并。 输入形状为[3,3,3,32],[32]的“标准/打包”(op:“打包”)。

我尝试使用从“无到4”的多个轴值,但没有任何效果。 有人可以说明问题是什么以及如何解决?

您的代码中有两个错误。 一个是var包含一个张量列表,tf.norm()只期望一个张量。 此外,权重的尺寸为4 ,尺寸从0开始编号,因此第四个尺寸的轴为3。此代码(经过测试):

import tensorflow as tf

input_layer = tf.random_uniform( shape = ( 2, 10, 10, 2 ) )

conv1 = tf.layers.conv2d(
                         inputs=input_layer,
                         filters=32,
                         strides=(1, 1),
                         kernel_size=[3, 3],
                         padding="valid",
                         activation=tf.nn.relu,
                         use_bias=True,
                         kernel_regularizer=tf.nn.l2_loss,
                         bias_regularizer=tf.nn.l2_loss,
                         name="conv1")

var = [v for v in tf.trainable_variables() if "conv1" in v.name][ 0 ]
print( tf.norm( var, axis = 3 ) )

将输出:

Tensor(“范数/压缩:0”,shape =(3,3,2),dtype = float32)

没有错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM