簡體   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