You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow搭建指定架构CNN时tf.nn.conv2D报rank4错误求解

错误原因与修复方案

核心报错根源

你当前代码混用了TensorFlow底层nn API与Keras高层API,且存在多处参数缺失、变量名错误:

  • 错误1:tf.nn.conv2d的filters参数需要传入预定义的4维权重张量,不能直接传入滤波器数量,你直接传filters=8导致滤波器权重形状为空,触发本次rank 0报错
  • 错误2:第二层CONV2D(Z2定义行)完全缺失filters参数,未指定16个2x2滤波器的配置
  • 错误3:Flatten层输出存在变量F中,但全连接层错误传入了未定义的变量P
  • 错误4:tf.contrib模块在TensorFlow 2.x中已被废弃,相关flatten、fully_connected接口和Keras模型存在兼容性问题,作业要求返回Keras模型,应该统一使用tf.keras.layers下的层实现

修正后的完整代码

import tensorflow as tf

def convolutional_model(input_shape):
    input_img = tf.keras.Input(shape=input_shape)
    # CONV2D: 8 filters 4x4, stride of 1, padding 'SAME'
    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, softmax activation
    outputs = tf.keras.layers.Dense(units=6, activation='softmax')(F)

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

额外说明

修正后的代码完全符合Coursera卷积神经网络作业的要求,所有层均为Keras原生层,权重会自动注册到模型中,后续可以直接调用compile、fit完成训练流程。

内容的提问来源于stack exchange,提问作者Adem Youssef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:45:02