代码之家  ›  专栏  ›  技术社区  ›  T D Nguyen

AttributeError:“numpy.float32”对象没有属性“\u index”

  •  0
  • T D Nguyen  · 技术社区  · 6 年前

    Tensorflow.keras.utils.Sequence 但有numpy属性错误。

    from tensorflow.keras.utils import Sequence
    class DataGenerator(Sequence):
        def __init__(self, dataset, batch_size=16, dim=(1), shuffle=True):
            'Initialization'
            self.dim = dim
            self.batch_size = batch_size
            self.dataset = dataset
            self.shuffle = shuffle
            self.on_epoch_end()
    
        def __len__(self):
            'Denotes the number of batches per epoch'
            return tf.math.ceil(len(self.dataset) / self.batch_size)
    
        def __getitem__(self, index):
            'Generate one batch of data'
            # Generate indexes of the batch
            indexes = self.indexes[index*self.batch_size:(index+1)*self.batch_size]
    
            # Find list of IDs
            list_IDs_temp = [self.dataset.index[k] for k in indexes]
    
            # Generate data
            y = dataset.loc[list_IDs_temp,['rating']].to_numpy()
            X = dataset.loc[list_IDs_temp,['user_id', 'item_id']].to_numpy()
            return (X, y)
    
        def on_epoch_end(self):
            'Updates indexes after each epoch'
            self.indexes = np.arange(len(dataset))
            if self.shuffle == True:
                np.random.shuffle(self.indexes)
    

    和配件:

    history = model.fit(train_generator,use_multiprocessing=True, steps_per_epoch=1, epochs=10, verbose=0)
    

    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-23-c17d5c8aa46c> in <module>()
    ----> 1 history = model.fit(train_generator,use_multiprocessing=True, steps_per_epoch=1, epochs=10, verbose=0)
    
    5 frames
    /tensorflow-2.1.0/python3.6/tensorflow_core/python/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, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
        817         max_queue_size=max_queue_size,
        818         workers=workers,
    --> 819         use_multiprocessing=use_multiprocessing)
        820 
        821   def evaluate(self,
    
    /tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/training_v2.py in fit(self, model, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
        233           max_queue_size=max_queue_size,
        234           workers=workers,
    --> 235           use_multiprocessing=use_multiprocessing)
        236 
        237       total_samples = _get_total_number_of_samples(training_data_adapter)
    
    /tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/training_v2.py in _process_training_inputs(model, x, y, batch_size, epochs, sample_weights, class_weights, steps_per_epoch, validation_split, validation_data, validation_steps, shuffle, distribution_strategy, max_queue_size, workers, use_multiprocessing)
        591         max_queue_size=max_queue_size,
        592         workers=workers,
    --> 593         use_multiprocessing=use_multiprocessing)
        594     val_adapter = None
        595     if validation_data:
    
    /tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/training_v2.py in _process_inputs(model, mode, x, y, batch_size, epochs, sample_weights, class_weights, shuffle, steps, distribution_strategy, max_queue_size, workers, use_multiprocessing)
        704       max_queue_size=max_queue_size,
        705       workers=workers,
    --> 706       use_multiprocessing=use_multiprocessing)
        707 
        708   return adapter
    
    /tensorflow-2.1.0/python3.6/tensorflow_core/python/keras/engine/data_adapter.py in __init__(self, x, y, sample_weights, standardize_function, shuffle, workers, use_multiprocessing, max_queue_size, **kwargs)
        941       raise ValueError("`sample_weight` argument is not supported when using "
        942                        "`keras.utils.Sequence` as input.")
    --> 943     self._size = len(x)
        944     self._shuffle_sequence = shuffle
        945     super(KerasSequenceAdapter, self).__init__(
    
    /tensorflow-2.1.0/python3.6/tensorflow_core/python/framework/ops.py in __index__(self)
        860 
        861   def __index__(self):
    --> 862     return self._numpy().__index__()
        863 
        864   def __bool__(self):
    
    AttributeError: 'numpy.float32' object has no attribute '__index__'
    

    有什么建议吗?谢谢

    0 回复  |  直到 6 年前
        1
  •  0
  •   T D Nguyen    6 年前

    根据莫妮卡的建议,我用 math.ceil tf.math.ceil __len__ 方法。

    推荐文章