Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';发电机&x27;对象没有属性';形状';_Python_Keras_Generator_Batch Processing_Attributeerror - Fatal编程技术网

Python 属性错误:';发电机&x27;对象没有属性';形状';

Python 属性错误:';发电机&x27;对象没有属性';形状';,python,keras,generator,batch-processing,attributeerror,Python,Keras,Generator,Batch Processing,Attributeerror,我正在尝试建立一些自定义生成器,并将其返回到keras层中,以便进行巴斯大小的训练。 它说我有一些属性问题,但我不知道如何解决它,因为我已经遭受了超过5天的这个问题。 你能帮我吗? 下面是代码 from sys import stdout #for progressing bar function import numpy as np import tensorflow as tf import keras from sklearn.preprocessing import StandardS

我正在尝试建立一些自定义生成器,并将其返回到keras层中,以便进行巴斯大小的训练。 它说我有一些属性问题,但我不知道如何解决它,因为我已经遭受了超过5天的这个问题。 你能帮我吗? 下面是代码


from sys import stdout #for progressing bar function
import numpy as np
import tensorflow as tf
import keras
from sklearn.preprocessing import StandardScaler #Normalization
from keras.callbacks import EarlyStopping #EearlyStopping
from keras.callbacks import ModelCheckpoint #Extract best model from early stopping method
from keras.models import load_model #to load the saved model
from keras.models import Model #for 1d convolution network
from keras.layers import Input #for 1d convolution network
from keras.layers import Dense #for 1d convolution network
from keras.layers import Flatten #for 1d convolution network
from keras.layers import BatchNormalization #for vanishing gradient problem
from keras.layers import Dropout #for vanishing gradient problem
from keras.layers.convolutional import Conv1D #for 1d convolution network
from keras.layers.convolutional import MaxPooling1D #for 1d convolution network
from keras.layers.merge import concatenate
from keras.layers.experimental.preprocessing import Rescaling
from keras import backend as K  #for clearning flash memory and using GPU forcefully
from keras.utils import HDF5Matrix #Load HDF5
from keras.utils import Sequence #For batch generation
import h5py #Load HDF5
import matplotlib.pyplot as plt
import matplotlib

class Mygenerator(Sequence):
    def __init__(self, x_set, y_set, batch_size):
        self.x, self.y = np.array(x_set), np.array(y_set)
        self.batch_size = batch_size

    def __len__(self):
        return int(np.ceil(len(self.x[1]) / float(self.batch_size)))

    def __getitem__(self, idx):
          X = np.array(self.x[:][int(idx * self.batch_size):int((idx + 1) * self.batch_size)[:]])
          y = np.array(self.y[:][int(idx * self.batch_size):int((idx + 1) * self.batch_size)])

          yield X, y

X_tr_list = HDF5Matrix("/content/gdrive/My Drive/contest/data/X_train_set.hdf5", "data")
Y_tr = HDF5Matrix("/content/gdrive/My Drive/contest/data/Y_train_set.hdf5", "data") 
X_te_list = HDF5Matrix("/content/gdrive/My Drive/contest/data/X_test_set.hdf5", "data")
Y_te = HDF5Matrix("/content/gdrive/My Drive/contest/data/Y_test_set.hdf5", "data") 

#Training

input_x = list()
output_y = list()

if g == 0: #The inintial training

  print("Sangwoo : Model set up of the input parts begins!")
  for i in range(14400):

      visible = Input(shape=(n_steps, n_features))
      cnn = Conv1D(filters=24, kernel_size=2, activation= lambda x : tf.nn.leaky_relu(x, alpha=0.2))(visible)
      cnn = MaxPooling1D(pool_size=2)(cnn)
      cnn_output = Flatten()(cnn)
    
      input_x.append(visible)
      output_y.append(cnn_output)
    
      update_progress(i/(14400))

  print("Sangwoo : Model set up of the output parts begins!")

  # merge input models
  merge = concatenate([output_y[s] for s in range(len(output_y))])

  listDense = list()

  for x in range(7):  #len(floodplain)
      output = Dense(1, activation= lambda x : tf.nn.leaky_relu(x, alpha=0.2), name="output{}".format(x+1))(dense)
      listDense.append(output)
      update_progress((x+1)/7)

  model = Model(inputs=input_x, outputs=listDense)

  model.compile(optimizer='adam', loss='mse')

  #model.summary()

  #averaging loss and accuracy
  checkpoint = MergeMetrics()

  #early stopping
  es = EarlyStopping(monitor='val_loss',patience=10) 
  best = ModelCheckpoint(filepath='/content/gdrive/My Drive/contest/best_model.h5', monitor='val_loss', save_best_only=True)

  print("Sangwoo : The training begins!") 
  print("X_tr_list", (np.shape(X_tr_list[1]), "Y_tr_list",(np.shape(Y_tr[1]))))
  # fit model
  #hist = model.fit([X_tr_list[i] for i in range(len(X_tr_list))], [Y_tr[i] for i in range(Y_tr.shape[0])], epochs=1000, verbose=1, callbacks=[checkpoint, es, best], validation_data = ([X_te_list[x] for x in range(len(X_te_list))], [Y_te[i] for i in range(Y_te.shape[0])]))
  hist = model.fit(Mygenerator([X_tr_list[i] for i in range(len(X_tr_list))], [Y_tr[i] for i in range(Y_tr.shape[0])], 32), steps_per_epoch=(X_tr_list.shape[1]//32), epochs=1000, verbose=1, callbacks=[checkpoint, es, best], validation_data=Mygenerator([X_te_list[i] for i in range(len(X_te_list))], [Y_te[i] for i in range(Y_te.shape[0])], 32))
  fig = plt.figure()

错误消息如下所示

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/data_adapter.py in __init__(self, x, y, sample_weights, workers, use_multiprocessing, max_queue_size, model, **kwargs)
    794           lambda x: model(x, training=False), args=(concrete_x,))
    795 
--> 796     self._first_batch_size = int(nest.flatten(peek)[0].shape[0])
    797 
    798     def _get_dynamic_shape(t):

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

你能添加所有导入吗?你好,博士。我编辑了我的代码,添加了所有导入的信息。博士。你有什么想法吗?是的,model.fit-in keras不带发电机,你需要使用model.fit\u发电机。只有tf.keras允许model.fit中的发电机,因为您看到它不工作,fit_发电机工作吗?