首页 > 解决方案 > 完成 GeneratorDataset 迭代器时发生错误:前置条件失败:Python 解释器状态未初始化

问题描述

我知道这个问题已经被问过很多次了,但似乎没有什么能解决我的问题。我有一个用于二进制分类的完全连接的神经网络:

params = {'batch_size': 32,
          'n_classes': 2,
          'shuffle': True}


training_generator = DataGenerator(partition_X1['train'], partition_X2['train'],labels, **params)
validation_generator = DataGenerator(partition_X1['valid'],partition_X2['valid'], labels, **params)


###First branch:
i1 = Input(shape=(115,))
c1 = Dense(64,  activation='relu')(i1)
c1 = Dropout(0.1)(c1)
c1 = Dense(64,  activation='relu')(c1)
c1 = Dropout(0.1)(c1)

###Second branch
i2 = Input(shape=(811, ))
c2 = Dense(128,  activation='relu')(i2)
c2 = Dropout(0.1)(c2)
c2 = Dense(128,  activation='relu')(c2)
c2 = Dropout(0.1)(c2)

###Concatenate
c = concatenate([c1, c2])

x = Dense(128,  activation='relu')(c)
x = Dropout(0.1)(x)
x = Dense(128,  activation='relu')(x)
x = Dropout(0.1)(x)
output = Dense(1, activation='sigmoid')(x)

model = Model([i1, i2], [output])

model.summary()

##compiling model
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])

checkpoint = ModelCheckpoint(modWeightsFilepath, monitor='val_acc', verbose=1, save_best_only=True, save_weights_only=True, mode='auto')

earlystop = EarlyStopping(monitor='val_acc', min_delta=0.001, patience=3, verbose=1, mode='auto')
callbacks_list = [earlystop,checkpoint]

model.fit_generator(generator=training_generator,epochs=30,validation_data=validation_generator,
                    use_multiprocessing=True,
                    workers=8,callbacks=callbacks_list)

但是,当我运行模型时,出现以下错误:

2021-06-09 11:29:52.750421: W tensorflow/core/kernels/data/generator_dataset_op.cc:103] Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated.

上面的另一个错误是:

tensorflow.python.framework.errors_impl.InvalidArgumentError:  Matrix size-incompatible: In[0]: [32,115], In[1]: [811,128]
     [[node model/dense_2/MatMul (defined at FC_model.py:146) ]] [Op:__inference_train_function_1414]

一个输入的形状是 (811,),另一个是 (115,),标签可以是 0 或 1。我用于生成器的代码是:


    def __data_generation(self,list_IDs_temp_X1,list_IDs_temp_X2):
        X1 = np.empty((self.batch_size,811))
        X2 = np.empty((self.batch_size,115))
        y = np.empty((self.batch_size),dtype=int)
        
        for ID in range(len(list_IDs_temp_X1)):
            if list_IDs_temp_X1[ID] in self.labels:
                X1[ID] = np.load(list_IDs_temp_X1[ID])
                X2[ID] = (np.load(list_IDs_temp_X1[ID])).flatten()
                print('shape :',X2[ID].shape)
                y[ID] = self.labels[list_IDs_temp_snp[ID]]
            
        return X1,X2,y

有人可以解释为什么我会收到错误吗?见解将不胜感激。

标签: python-3.xkerasdeep-learningneural-network

解决方案


推荐阅读