Keras 属性错误:';发电机&x27;对象没有属性';ndim&x27;

Keras 属性错误:';发电机&x27;对象没有属性';ndim&x27;,keras,python-3.6,keras-layer,triplet,Keras,Python 3.6,Keras Layer,Triplet,我正在研究Keras上的三胞胎网络,以找到图像的相似性。然而,我在给模型喂食三胞胎时遇到了一个错误。请您在这方面给予帮助 基本上,我试图用3个输入(锚定、正、负)来感受模型 我正在研究Python3,并使用Keras用fit_模型拟合模型。这是我培训模型的职能: def train(trainDB, testDB, n_iter, batch_size, evaluate_every, test_size, loss_every): print("Starting training p

我正在研究Keras上的三胞胎网络,以找到图像的相似性。然而,我在给模型喂食三胞胎时遇到了一个错误。请您在这方面给予帮助

基本上,我试图用3个输入(锚定、正、负)来感受模型

我正在研究Python3,并使用Keras用fit_模型拟合模型。这是我培训模型的职能:

def train(trainDB, testDB, n_iter, batch_size, evaluate_every, test_size, 
loss_every):
    print("Starting training process!")
    print("-------------------------------------")

    best = -1
    t_start = time.time()

    inputs=trainDB.getTripletTrainData(batch_size)
    targets=np.ones([batch_size])

    for i in range(0, n_iter):
        loss=tripletNet.fit(inputs, targets)

        #print("Loss: {0}".format(loss)) 

        if i % evaluate_every == 0:
            print("Time for {0} iterations: {1}".format(i, time.time()-t_start))
            val_acc = self.test_oneshot(testDB, test_size)
            if val_acc > best:
                print("Current best: {0}, previous best: {1}".format(val_acc, best))
                print("Saving weights to: {0} \n".format(weights_path))
                self.tripletNet.save_weights(weights_path)
                best=val_acc

        if i % loss_every == 0:
            print("iteration {}, training loss: {:.2f},".format(i,loss))
错误消息:

Starting training process!
-------------------------------------
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-163-b5442e61de2d> in <module>()
----> 1 train(trainDatabase, testDatabase, n_iter, batch_size, evaluate_every, test_size, loss_every)

5 frames
<ipython-input-161-f417f0ebcfc7> in train(trainDB, testDB, n_iter, batch_size, evaluate_every, test_size, loss_every)
     10 
     11     for i in range(0, n_iter):
---> 12         loss=tripletNet.fit(inputs, targets)
     13 
     14         #print("Loss: {0}".format(loss))

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
    950             sample_weight=sample_weight,
    951             class_weight=class_weight,
--> 952             batch_size=batch_size)
    953         # Prepare validation data.
    954         do_validation = False

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
    749             feed_input_shapes,
    750             check_batch_axis=False,  # Don't enforce the batch size.
--> 751             exception_prefix='input')
    752 
    753         if y is not None:

/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
     90         data = data.values if data.__class__.__name__ == 'DataFrame' else data
     91         data = [data]
---> 92     data = [standardize_single_array(x) for x in data]
     93 
     94     if len(data) != len(names):

/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in <listcomp>(.0)
     90         data = data.values if data.__class__.__name__ == 'DataFrame' else data
     91         data = [data]
---> 92     data = [standardize_single_array(x) for x in data]
     93 
     94     if len(data) != len(names):

/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_single_array(x)
     25                 'Got tensor with shape: %s' % str(shape))
     26         return x
---> 27     elif x.ndim == 1:
     28         x = np.expand_dims(x, 1)
     29     return x

**AttributeError: 'generator' object has no attribute 'ndim'**
开始培训过程!
-------------------------------------
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1列(列车数据库、测试数据库、iter、批量、评估、测试、损耗)
5帧
列车内(列车数据库、测试数据库、iter、批量大小、评估时间、测试时间、损耗时间)
10
范围(0,n_iter)内的i为11:
--->12损失=三重净拟合(输入、目标)
13
14#打印(“丢失:{0}”。格式(丢失))
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in-fit(self、x、y、批量大小、历元、冗余、回调、验证分割、验证数据、混洗、类权重、样本权重、初始历元、每历元的步骤、验证步骤、**kwargs)
950样品重量=样品重量,
951类重量=类重量,
-->952批次大小=批次大小)
953#准备验证数据。
954 do_验证=错误
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py输入用户数据(自身、x、y、样本重量、类别重量、检查数组长度、批次大小)
749馈送输入形状,
750检查批处理轴=False,#不强制执行批处理大小。
-->751异常(前缀为“输入”)
752
753如果y不是无:
/usr/local/lib/python3.6/dist-packages/keras/engine/training\u utils.py标准化输入数据(数据、名称、形状、检查批处理轴、异常前缀)
90 data=data.values if data.\u_class.\u_.\u_name\u_=='DataFrame'else data
91数据=[数据]
--->92数据=[为数据中的x标准化单个数组(x)]
93
94如果len(数据)!=len(姓名):
/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in(.0)
90 data=data.values if data.\u_class.\u_.\u_name\u_=='DataFrame'else data
91数据=[数据]
--->92数据=[为数据中的x标准化单个数组(x)]
93
94如果len(数据)!=len(姓名):
/标准化单个数组中的usr/local/lib/python3.6/dist-packages/keras/engine/training\u utils.py(x)
25'具有形状为%s“%str(形状))的张量
26返回x
--->27 elif x.ndim==1:
28 x=np.展开尺寸(x,1)
29返回x
**AttributeError:“生成器”对象没有属性“ndim”**
如果我使用fit_生成器。。我得到下面的错误

Starting training process!
-------------------------------------
Epoch 1/1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-194-b5442e61de2d> in <module>()
----> 1 train(trainDatabase, testDatabase, n_iter, batch_size, evaluate_every, test_size, loss_every)

3 frames
<ipython-input-193-8ad964a9916f> in train(trainDB, testDB, n_iter, batch_size, evaluate_every, test_size, loss_every)
     10 
     11     for i in range(0, n_iter):
---> 12         loss=tripletNet.fit_generator(inputs, targets)
     13 
     14         #print("Loss: {0}".format(loss))

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `' + object_name + '` call to the ' +
     90                               'Keras 2 API: ' + signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

/usr/local/lib/python3.6/dist-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)
   1416             use_multiprocessing=use_multiprocessing,
   1417             shuffle=shuffle,
-> 1418             initial_epoch=initial_epoch)
   1419 
   1420     @interfaces.legacy_generator_methods_support

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
    178             steps_done = 0
    179             batch_index = 0
--> 180             while steps_done < steps_per_epoch:
    181                 generator_output = next(output_generator)
    182 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
开始培训过程!
-------------------------------------
纪元1/1
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1列(列车数据库、测试数据库、iter、批量、评估、测试、损耗)
3帧
列车内(列车数据库、测试数据库、iter、批量大小、评估时间、测试时间、损耗时间)
10
范围(0,n_iter)内的i为11:
--->12损耗=三重网拟合发生器(输入、目标)
13
14#打印(“丢失:{0}”。格式(丢失))
/包装器中的usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py(*args,**kwargs)
89 warnings.warn('Update your`'+object\u name+'`调用+
90'Keras 2 API:'+签名,堆栈级别=2)
--->91返回函数(*args,**kwargs)
92包装器._原始函数=func
93返回包装器
/usr/local/lib/python3.6/dist-packages/keras/engine/training.py-in-fit\u生成器(self、生成器、每个历元的步骤、历元、冗余、回调、验证数据、验证步骤、类权重、最大队列大小、工人、使用多处理、无序、初始历元)
1416使用多处理=使用多处理,
1417洗牌=洗牌,
->1418初始_历元=初始_历元)
1419
1420@interfaces.legacy\u生成器\u方法\u支持
/usr/local/lib/python3.6/dist-packages/keras/engine/training\u generator.py in-fit\u generator(模型、生成器、每个历元的步骤、历元、冗余、回调、验证数据、验证步骤、类权重、最大队列大小、工作人员、使用多处理、无序、初始历元)
178步骤完成=0
179批次指数=0
-->180当步骤完成时<每个步骤:
181发电机输出=下一个(发电机输出)
182

ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
似乎
输入
是一个生成器。如果是这种情况,那么您需要使用
fit\u generator
而不是
fit
。谢谢。。如果我使用fit_generator,我会得到以下错误。ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()’嗯,我还不清楚。请您向我们展示
trainDB.GetTripleTrainData的定义
?您可以将“输入”和“目标”传递给fit_生成器函数。但是,fit和fit_生成器有不同的接口。fit_generator按“targets”变量传递到的历元值计算步长。由于每个历元的步长是np.array,因此无法与steps\u done(仅为0)进行比较。因此,错误消息表示无法将数组与标量值进行比较。根据所使用函数的接口传递参数<