Python 属性错误:';发电机&x27;对象没有属性';形状';
我正在尝试建立一些自定义生成器,并将其返回到keras层中,以便进行巴斯大小的训练。 它说我有一些属性问题,但我不知道如何解决它,因为我已经遭受了超过5天的这个问题。 你能帮我吗? 下面是代码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
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_发电机工作吗?