Deep learning Keras拟合发生器验证数据类型错误:';浮动';对象不能解释为整数

Deep learning Keras拟合发生器验证数据类型错误:';浮动';对象不能解释为整数,deep-learning,keras,anaconda,Deep Learning,Keras,Anaconda,我正在尝试运行宁丁编写的CUHK03个人重新识别脚本(使用Keras实现Ahmed等人的论文) 看 错误文本如下: TypeError Traceback (most recent call last) in () ----> 1 main("E:\DL\cuhk-03.h5") in main(dataset_path) 17 model = generate_model() 18 model = compile_model(model) ---&g

我正在尝试运行宁丁编写的CUHK03个人重新识别脚本(使用Keras实现Ahmed等人的论文) 看

错误文本如下:

TypeError Traceback (most recent call last)
in ()

    ----> 1 main("E:\DL\cuhk-03.h5")

in main(dataset_path)

    17 model = generate_model()
    18 model = compile_model(model)
    ---> 19 train(model, dataset_path)
    20
    21 def train(model,

in train(model, h5_path, weights_name, train_num, one_epoch, epoch_num, flag_random, random_pattern, flag_train, flag_val, which_val_data, nb_val_samples)
    39 rand_x = np.random.rand()
    40 flag_train = random_pattern(rand_x)
    ---> 41 model.fit_generator(Data_Generator.flow(f,flag = flag_train),one_epoch,epoch_num,validation_data=Data_Generator.flow(f,train_or_validation=which_val_data,flag=flag_val),nb_val_samples=nb_val_samples)
    42 Rank1s.append(round(cmc(model)[0],2))
    43 print (Rank1s)

~\Anaconda3\lib\site-packages\keras\legacy\interfaces.py in wrapper(*args, **kwargs)

    89 warnings.warn('Update your ' + object_name + 90 ' call to the Keras 2 API: ' + signature, stacklevel=2)
    ---> 91 return func(*args, **kwargs)
    92 wrapper._original_function = func
    93 return wrapper

~\Anaconda3\lib\site-packages\keras\engine\training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)

    2023 epoch = initial_epoch
    2024
    -> 2025 do_validation = bool(validation_data)
    2026 self._make_train_function()
    2027 if do_validation:

TypeError: 'float' object cannot be interpreted as an integer
我正在Windows 10(x86)上的Anaconda中使用Jupyter笔记本。 Keras版本2.1.3 Python版本3.6.3
Tensorflow后端(1.4.0)

正常,因此
验证\u数据是

Data_Generator.flow(f,train_or_validation=which_val_data,flag=flag_val)
当执行
do\u validation=bool(validation\u data)
时,对对象调用bool将调用
非零
len
(如果定义了其中任何一个)。在这种情况下,
Sequence
实现
len
,因此它检查len(Sequence)==0
。您的问题是
len
返回一个
float
(这是一个错误),因此当它尝试在
bool
中转换它时失败

断言
len
返回
int


我已经通过了同样的问题,我只想补充已经给出的答案

如上所述,“[…]问题是
len
返回一个浮点值(这是一个错误),因此当它试图在bool中转换它时,它失败了”。但是,您指的是哪个
len

发生这种情况很可能是因为您使用的是keras生成器模板,其中包含以下定义

def __len__(self):
return np.ceil(len(self.x) / self.batch_size)
如前所述,确保它将
返回
和整数。因此,它解决了以下问题:

def __len__(self):
return int(np.ceil(len(self.x) / self.batch_size))

从错误消息看,验证数据是一个浮点数。看看它是从哪里来的。可能来自数据集。验证数据是一个浮点值。这也是用于训练的数据,因为我们必须缩放数据(/255,因为它是rgb值)。Ning Ding的代码也是以同样的方式执行的,我不明白为什么这样会抛出错误,就像我在交互式shell中尝试bool(3.5)时一样,python 3没有抛出错误。你解决了这个问题吗?谢谢,我会试一试。我有相同的错误,但在不同的上下文中。我的生成器上的
\uuu len\uuu()
方法返回了一个浮点。@Goodword谢谢,我已经更新了答案以包含解决方案。这个答案救了我的命。