TensorFlow中'list' object has no attribute 'compile'错误求助
AttributeError: 'list' object has no attribute 'compile' 解决方案
你的错误根源在于模型初始化的写法错误,导致my_model被赋值成了一个列表,而不是TensorFlow的Keras模型实例,自然没有compile方法。
错误的写法:
my_model = tf.keras.Sequential()([ # 层定义... ])
正确的写法应该是把层列表直接作为参数传给Sequential构造函数,去掉多余的括号:
my_model = tf.keras.Sequential([ tf.keras.layers.Conv2D(16, kernel_size=(3, 3), activation='relu'), tf.keras.layers.Conv2D(32, (3, 3), activation='relu', kernel_regularizer=tf.keras.regularizers.l2(0.01), bias_regularizer=tf.keras.regularizers.l1(0.01)), tf.keras.layers.BatchNormalization(), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Dropout(0.25), tf.keras.layers.Flatten(), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(num_classes, activation='softmax') ]) # 后续优化器和编译代码保持不变 scaled_lr = 0.00001 * hvd.size() opt = tf.keras.optimizers.Adam(scaled_lr) opt = hvd.DistributedOptimizer( opt, backward_passes_per_step=1, average_aggregated_gradients=True) my_model.compile(loss=tf.losses.SparseCategoricalCrossentropy(), optimizer=opt, metrics=['accuracy'], experimental_run_tf_function=False)
原因解释
tf.keras.Sequential()会创建一个空的Sequential模型实例,紧接着用([...])调用这个实例,相当于调用模型的__call__方法,传入的层列表会被当成输入张量的处理流程,返回的是模型输出的张量(如果有多个输出则是列表),而不是模型本身。正确的方式是直接将层列表作为参数传入Sequential的构造函数,这样得到的才是可编译的模型对象。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

