首页 > 解决方案 > Keras 中的错误 - 'int' 对象没有属性 'shape'

问题描述

我正在使用 VGGFace 模型。我将 tensorflow.keras 与 Tensorflow 2.4.1 版一起使用。以下是生成器的功能:

def gen(list_tuples, person_to_images_map, batch_size=16):
    ppl = list(person_to_images_map.keys())
    while True:
        batch_tuples = sample(list_tuples, batch_size // 2)
        labels = [1] * len(batch_tuples)
        while len(batch_tuples) < batch_size:
            p1 = choice(ppl)
            p2 = choice(ppl)

            if p1 != p2 and (p1, p2) not in list_tuples and (p2, p1) not in list_tuples:
                batch_tuples.append((p1, p2))
                labels.append(0)

        for x in batch_tuples:
            if not len(person_to_images_map[x[0]]):
                print(x[0])

        X1 = [choice(person_to_images_map[x[0]]) for x in batch_tuples]
        X1 = np.array([read_img(x) for x in X1])

        X2 = [choice(person_to_images_map[x[1]]) for x in batch_tuples]
        X2 = np.array([read_img(x) for x in X2])

        yield [X1, X2], labels

valx=gen(val, val_person_to_images_map, batch_size=100)

for i in valx:
    valx=i
    break

在模型执行期间它给出错误:'int'对象没有属性'shape':

history = model.fit_generator(gen(train, train_person_to_images_map, batch_size=16), use_multiprocessing=True,
                    validation_data=(valx[0],valx[1]), epochs=50, verbose=1,
                    workers = 4, callbacks=callbacks_list, steps_per_epoch=200)
AttributeError                            Traceback (most recent call last)
<ipython-input-114-1c7e5a32eed2> in <module>()
      1 history = model.fit_generator(gen(train, train_person_to_images_map, batch_size=16), use_multiprocessing=True,
      2                     validation_data=(valx[0],valx[1]), epochs=50, verbose=1,
----> 3                     workers = 4, callbacks=callbacks_list, steps_per_epoch=200)

7 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/data_adapter.py in _get_dynamic_shape(t)
    805 
    806     def _get_dynamic_shape(t):
--> 807       shape = t.shape
    808       # Unknown number of dimensions, `as_list` cannot be called.
    809       if shape.rank is None:

AttributeError: 'int' object has no attribute 'shape'

我查找了类似的查询,但我似乎不明白是哪一行导致了错误。我尝试将 gen 函数中的代码更改为

for x in batch_tuples:
    x=np.array(x)
    if not len(person_to_images_map[x[0]]):
         print(x[0])

但这给了我另一个错误:

'generator' object is not subscriptable in python

标签: pythontensorflowkerasgeneratortf.keras

解决方案


请检查图像调整大小person_to_images_map[x[0]]


推荐阅读