属性错误: 'KerasTensor'对象没有属性'_keras_shape'

3

你好,我正在制作一个模型来训练数据集,但在我的resnet_model中,我遇到了属性错误,请帮助我解决这个错误。以下是代码:

from Lib.data_loader import DataLoader
from Lib.resnet_model import Resnet3DBuilder
from Lib.HistoryGraph import HistoryGraph
import Lib.image as img
from Lib.utils import mkdirs
#import tensorflow as tf
import os

from math import ceil

from keras.optimizers import SGD

#from tensorflow.keras.optimizers import SGD

from keras.callbacks import ModelCheckpoint

#from tensorflow.keras.callbacks import ModelCheckpoint

target_size = (64,96)
nb_frames = 16  # here this will get number of pictres from datasets folder
skip = 1 # using resnet we skip different layers
nb_classes = 27
batch_size = 64 
input_shape = (nb_frames,) + target_size + (3,)

workers = 8 
use_multiprocessing = False 
max_queue_size = 20 



resnet_model = Resnet3DBuilder.build_resnet_101(input_shape, nb_classes, drop_rate = 0.5)

optimizer = SGD(lr=0.01, momentum=0.9, decay=0.0001, nesterov=False)

resnet_model.compile(optimizer = optimizer, loss= "categorical_crossentropy" , metrics=["accuracy"])

model_file = os.path.join(path_model, 'resnetmodel.hdf5')

model_checkpointer = ModelCheckpoint(model_file, monitor='val_acc',verbose=1, save_best_only=True, mode='max')

history_graph = HistoryGraph(model_path_name = os.path.join(path_model, "graphs"))

nb_sample_train = data.train_df["video_id"].size
nb_sample_val = data.val_df["video_id"].size

所有的代码都正常运行。 错误出现在这里:
AttributeError                            Traceback (most recent call last)
<ipython-input-11-be30533fbfba> in <module>
----> 1 resnet_model = Resnet3DBuilder.build_resnet_101(input_shape, nb_classes, drop_rate = 0.5)
      2 
      3 optimizer = SGD(lr=0.01, momentum=0.9, decay=0.0001, nesterov=False)
      4 
      5 resnet_model.compile(optimizer = optimizer, loss= "categorical_crossentropy" , metrics=["accuracy"])

D:\HandGesturesProject\Lib\resnet_model.py in build_resnet_101(input_shape, num_outputs, reg_factor, drop_rate)
    258     def build_resnet_101(input_shape, num_outputs, reg_factor=1e-4, drop_rate=0):
    259         """Build resnet 101."""
--> 260         return Resnet3DBuilder.build(input_shape, num_outputs, bottleneck,
    261                                      [3, 4, 23, 3], reg_factor=reg_factor, drop_rate=drop_rate)

D:\HandGesturesProject\Lib\resnet_model.py in build(input_shape, num_outputs, block_fn, repetitions, reg_factor, drop_rate)
    223         filters = 64
    224         for i, r in enumerate(repetitions):
--> 225             block = _residual_block3d(block_fn, filters=filters,
    226                                       kernel_regularizer=l2(reg_factor),
    227                                       repetitions=r, is_first_layer=(i == 0)

D:\HandGesturesProject\Lib\resnet_model.py in f(input)
    105             if i == 0 and not is_first_layer:
    106                 strides = (2, 2, 2)
--> 107             input = block_function(filters=filters, strides=strides,
    108                                    kernel_regularizer=kernel_regularizer,
    109                                    is_first_block_of_first_layer=(

D:\HandGesturesProject\Lib\resnet_model.py in f(input)
    164                                    )(conv_3_3)
    165 
--> 166         return _shortcut3d(input, residual)
    167 
    168     return f

D:\HandGesturesProject\Lib\resnet_model.py in _shortcut3d(input, residual)
     76 
     77 def _shortcut3d(input, residual):
---> 78     stride_dim1 = input._keras_shape[DIM1_AXIS] \
     79         // residual._keras_shape[DIM1_AXIS]
     80     stride_dim2 = input._keras_shape[DIM2_AXIS] \

属性错误:'KerasTensor'对象没有属性'_keras_shape'

请帮我解决这个错误,即使我升级了它的库,我仍然无法理解它。


我可以了解更多关于这个“来自Lib”的信息吗?这是您的本地软件包吗?因为我感觉您正在使用TensorFlow > 2,而该库是建立在较早版本上的。 - simpleApp
是的,lib是我的本地包文件夹。 - Just ChiLL MiLL
我正在使用虚拟环境。 - Just ChiLL MiLL
非常感谢所有帮助我的人!实际上,我的错误是由于版本差异引起的。之前我使用的是Keras 2.4.x和tensorflow 2.4.2,然后我卸载了这些版本,并且改用Keras == 2.3.1和tensorflow == 2.2.0,问题得到了解决。 - Just ChiLL MiLL
1个回答

1

_keras_shape 属性在 Tensorflow > 2.0 中不存在。请升级您的库以使其与 > 2.0 兼容,或设置虚拟环境来支持它。

用于测试的小程序:

import tensorflow as tf
from keras.layers import Input

s = Input(shape=[1], dtype=tf.float32, name='1')
print("shape of s is: ",s._keras_shape) # (None, 1)

tf.__version__'2.3.1'中,这是无法工作并会抛出AttributeError: 'Tensor' object has no attribute '_keras_shape'的。

解决方法,如果您还没有准备好更新至2.0:

创建一个名为tensor1的虚拟环境。

virtualenv -p 2.7 tensor1

在Tensor和Keras上安装旧版本
pip install tensorflow==1.15
pip install keras==2.2.4 

然后希望这个特定的错误会消失,但你可能会遇到新的错误。


安装TensorFlow 1.15时出现以下错误:ERROR: 找不到满足要求tensorflow==1.15的版本(可用版本有:2.2.0rc1、2.2.0rc2、2.2.0rc3、2.2.0rc4、2.2.0、2.2.1、2.2.2、2.3.0rc0、2.3.0rc1、2.3.0rc2、2.3.0、2.3.1、2.3.2、2.4.0rc0、2.4.0rc1、2.4.0rc2、2.4.0rc3、2.4.0rc4、2.4.0、2.4.1、2.5.0rc0、2.5.0rc1、2.5.0rc2、2.5.0rc3) ERROR: 找不到匹配的发行版以安装tensorflow==1.15。 - Just ChiLL MiLL
谢谢所有帮助我的人!实际上,我的错误是由于版本差异所致。之前我使用的是Keras 2.4.x和tensorflow 2.4.2,然后我卸载了这些版本,并且改用Keras == 2.3.1和tensorflow == 2.2.0,问题就解决了。 - Just ChiLL MiLL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接