簡體   English   中英

"ValueError:形狀必須為 4 級,但對於 '{{node Conv2D_5}} 為 0 級,tf.nn.conv2d"

[英]ValueError: Shape must be rank 4 but is rank 0 for '{{node Conv2D_5}} , tf.nn.conv2d

我想構建一個具有以下架構的卷積模型:
CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> 展平 -> DENSE
論據:
input_img -- 輸入數據集,形狀 (input_shape)

Returns:
model -- TF Keras model (object containing the information for the entire training process)  

所以這是我到目前為止所做的代碼:

def convolutional_model(input_shape):

    input_img = tf.keras.Input(shape=input_shape)
    ## CONV2D: 8 filters 4x4, stride of 1, padding 'SAME'
    Z1 = tf.nn.conv2d(input_img,filters=8 ,strides=[1, 1, 1, 1], padding='SAME')
    ## RELU
    A1 = tf.nn.relu(Z1)
    ## MAXPOOL: window 8x8, stride 8, padding 'SAME'
    P1 = tf.nn.max_pool(A1, ksize = [1, 8, 8, 1], strides = [1, 8, 8, 1], padding='SAME')
    ## CONV2D: 16 filters 2x2, stride 1, padding 'SAME'
    Z2 = tf.nn.conv2d(P1, strides=[1, 1, 1, 1], padding='SAME')
    ## RELU
    A2 = tf.nn.relu(Z2)
    ## MAXPOOL: window 4x4, stride 4, padding 'SAME'
    P2 = tf.nn.max_pool(A2, ksize = [1, 4, 4, 1], strides = [1, 4, 4, 1], padding='SAME')
    ## FLATTEN
    F = tf.contrib.layers.flatten(P2)
    ## Dense layer
    ## 6 neurons in output layer. Hint: one of the arguments should be "activation='softmax'" 
    outputs = tf.contrib.layers.fully_connected(P, 6, activation_fn='softmax')

    model = tf.keras.Model(inputs=input_img, outputs=outputs)
    return model

我收到以下錯誤:

ValueError: Shape must be rank 4 but is rank 0 for '{{node Conv2D_5}} = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings=[], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true](input_10, Conv2D_5/filter)' with input shapes: [?,64,64,3], [].

有人可以幫忙嗎? 如果我的代碼中有任何其他錯誤,請對它們發表評論,我一直在為 Coursera Deeplearning 規范課程的這項作業而苦苦掙扎

tf.keras.Input(shape=(...))<\/code>創建一個符號張量,它允許我們僅通過知道模型的輸入和輸出來創建模型。 所以它是張量的占位符(但它本身不是張量)。 tf.nn.conv2d(input)<\/code>對給定的輸入執行卷積。 它不是模型層(不可訓練),只是一個功能。 因此,當向tf.nn.conv2d()<\/code>作為輸入時,它會拋出錯誤。

如果您正在嘗試構建模型,請使用tf.keras.layers.Conv2D()<\/code> 。

請參閱 tf.keras.Input 的tf.keras.Input<\/code>文檔https:\/\/www.tensorflow.org\/api_docs\/python\/tf\/keras\/Input<\/a>

請參閱 tf.nn.conv2d 的tf.nn.conv2d<\/code>文檔https:\/\/www.tensorflow.org\/api_docs\/python\/tf\/nn\/conv2d<\/a>

Z1 = tf.keras.layers.Conv2D(filters = 8,kernel_size= (4,4), strides=(1,1), padding='SAME')(input_img)
## RELU
A1 = tf.keras.layers.ReLU()(Z1)
## MAXPOOL: window 8x8, stride 8, padding 'SAME'
P1 = tf.keras.layers.MaxPool2D(pool_size=(8,8), strides =(8,8), padding='SAME')(A1)
## CONV2D: 16 filters 2x2, stride 1, padding 'SAME'
Z2 = tf.keras.layers.Conv2D(filters = 16,kernel_size= (2,2),strides =(1,1), padding='SAME')(P1)
## RELU
A2 = tf.keras.layers.ReLU()(Z2)
## MAXPOOL: window 4x4, stride 4, padding 'SAME'
P2 = tf.keras.layers.MaxPool2D(pool_size=(4,4), strides =(4,4), padding='SAME')(A2)
## FLATTEN
F = tf.keras.layers.Flatten()(P2)
## Dense layer
## 6 neurons in output layer. Hint: one of the arguments should be "activation='softmax'" 
outputs = tf.keras.layers.Dense(units = 6, activation = 'softmax')(F)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM