如何解决错误:其等级未定义,但图层需要定义的等级
我有一个tf.data.Dataset.from_generator
特征尺寸(224,224,1)
和标签尺寸(1,265)
来的tf.keras模型,就像我有265 CLASSES
一样。我的批量大小为64
,返回的功能大小为(64,244,1)
,标签大小为(64,265)
下面是我的训练模型:IM_SIZE = (224,1)
,而DO_FINE_TUNING
已设置为True
和FINE_TUNE_AT = 40
def model_defenition(model_type='ResNet50'):
if model_type == 'ResNet50':
base_model = tf.keras.applications.ResNet50(
include_top = False,weights='imagenet'
)
print(f'num layers in base model: {len(base_model.layers)}')
base_model.trainable = DO_FINE_TUNING
for layer in base_model.layers[:FINE_TUNE_AT]:
layer.trainable = False
model = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_shape=IM_SIZE),tf.keras.layers.Conv2D(filters=3,kernel_size=(3,3),padding='same'),base_model,tf.keras.layers.GlobalAveragePooling2D(),tf.keras.layers.Dense(units = len(CLASSES),activation=tf.nn.softmax)
])
return model
model = model_defenition(model_type='ResNet50')
model.compile(optimizer=OPTIMIZER,loss=LOSS_FN,metrics=METRICS_LIST)
model.summary()
当我按以下方式校准model.fit函数
model.fit(
train_ds,epochs=EPOCHS,steps_per_epoch=len(df_train)//BATCH_SIZE,validation_data=valid_ds,batch_size=BATCH_SIZE,verbose=1,callbacks=CALLBACKS,workers=1,use_multiprocessing=True
)
我遇到以下错误
ValueError: Input 0 of layer sequential is incompatible with the layer: its rank is undefined,but the layer requires a defined rank.
我正在使用Tensorflow版本2.2.0。 任何对此的帮助将不胜感激。 请随时要求代码的任何其他部分来重现此问题。
解决方法
所以这里的问题是Resnet
模型还包含Input_layer
。
如果您进行的是Resnet
模型的摘要,您会看到这一点。
base_model.summary()
Model: "resnet50"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_10 (InputLayer) [(None,None,0
__________________________________________________________________________________________________
conv1_pad (ZeroPadding2D) (None,3 0 input_10[0][0]
__________________________________________________________________________________________________
因此,我建议先使用base_model
,然后再使用您自己的图层,紧跟base_model
。
也要注意,请检查resenet
模型的文档。它说,如果使用include_top = False
,则还必须指定input_shape
。这也可能是问题。请检查API documentation。
我没有完整的代码,所以我不能从这里尝试所有内容。但是,我将介绍以上这些指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。