类型错误:无法腌制 _thread.RLock 对象将模型存储为腌制对象

时间:2021-02-15 22:25:53

标签: python tensorflow keras

我需要帮助来解决这个问题 TypeError: can't pickle _thread.RLock objects this is at end 当我尝试保存模型时,将模型存储为 PICKLE 对象 蟒蛇 3.6.8 TensorFlow 1.15 Keras 2.2.2

添加深度为 1
X_train=X_train.reshape(X_train.shape[0],X_train.shape[1],X_train.shape[2],1)
X_validation=X_validation.reshape(X_validation.shape[0],X_validation.shape[1],X_validation.shape[2],1)
X_test=X_test.reshape(X_test.shape[0],X_test.shape[1],X_test.shape[2],1)
 
 

############################# 图像增强:使其更通用

   dataGen= ImageDataGenerator(width_shift_range=0.1,   # 0.1 = 10%     IF MORE THAN 1 E.G 10 THEN IT REFFERS TO NO. OF  PIXELS EG 10 PIXELS
                                height_shift_range=0.1,
                                zoom_range=0.2,  # 0.2 MEANS CAN GO FROM 0.8 TO 1.2
                                shear_range=0.1,  # MAGNITUDE OF SHEAR ANGLE
                                rotation_range=10)  # DEGREES
    dataGen.fit(X_train)
    batches= dataGen.flow(X_train,y_train,batch_size=20)  # REQUESTING DATA GENRATOR TO GENERATE IMAGES  BATCH SIZE = NO. OF IMAGES CREAED EACH TIME ITS CALLED
    X_batch,y_batch = next(batches)
     
    # TO SHOW AGMENTED IMAGE SAMPLES
    fig,axs=plt.subplots(1,15,figsize=(20,5))
    fig.tight_layout()
     
    for i in range(15):
        axs[i].imshow(X_batch[i].reshape(imageDimesions[0],imageDimesions[1]))
        axs[i].axis('off')
    plt.show()
     
     
    y_train = to_categorical(y_train,noOfClasses)
    y_validation = to_categorical(y_validation,noOfClasses)
    y_test = to_categorical(y_test,noOfClasses)
     
    ############################### CONVOLUTION NEURAL NETWORK MODEL
    def myModel():
        no_Of_Filters=60
        size_of_Filter=(5,5) # THIS IS THE KERNEL THAT MOVE AROUND THE IMAGE TO GET THE FEATURES.
                             # THIS WOULD REMOVE 2 PIXELS FROM EACH BORDER WHEN USING 32 32 IMAGE
        size_of_Filter2=(3,3)
        size_of_pool=(2,2)  # SCALE DOWN ALL FEATURE MAP TO GERNALIZE MORE, TO REDUCE OVERFITTING
        no_Of_Nodes = 500   # NO. OF NODES IN HIDDEN LAYERS
        model= Sequential()
        model.add((Conv2D(no_Of_Filters,size_of_Filter,input_shape=(imageDimesions[0],imageDimesions[1],1),activation='relu')))  # ADDING MORE CONVOLUTION LAYERS = LESS FEATURES BUT CAN CAUSE ACCURACY TO INCREASE
        model.add((Conv2D(no_Of_Filters, size_of_Filter, activation='relu')))
        model.add(MaxPooling2D(pool_size=size_of_pool)) # DOES NOT EFFECT THE DEPTH/NO OF FILTERS
     
        model.add((Conv2D(no_Of_Filters//2, size_of_Filter2,activation='relu')))
        model.add((Conv2D(no_Of_Filters // 2, size_of_Filter2, activation='relu')))
        model.add(MaxPooling2D(pool_size=size_of_pool))
        model.add(Dropout(0.5))
     
        model.add(Flatten())
        model.add(Dense(no_Of_Nodes,activation='relu'))
        model.add(Dropout(0.5)) # INPUTS NODES TO DROP WITH EACH UPDATE 1 ALL 0 NONE
        model.add(Dense(noOfClasses,activation='softmax')) # OUTPUT LAYER
        # COMPILE MODEL
        model.compile(Adam(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
        return model
     
     
    ############################### TRAIN
    model = myModel()
    print(model.summary())
    history=model.fit_generator(dataGen.flow(X_train,y_train,batch_size=batch_size_val),steps_per_epoch=steps_per_epoch_val,epochs=epochs_val,validation_data=(X_validation,y_validation),shuffle=1)
     
    ############################### PLOT
    plt.figure(1)
    plt.plot(history.history['loss'])
    plt.plot(history.history['val_loss'])
    plt.legend(['training','validation'])
    plt.title('loss')
    plt.xlabel('epoch')
    plt.figure(2)
    plt.plot(history.history['accuracy'])
    plt.plot(history.history['val_accuracy'])
    plt.legend(['training','validation'])
    plt.title('Acurracy')
    plt.xlabel('epoch')
    plt.show()
    score =model.evaluate(X_test,y_test,verbose=0)
    print('Test Score:',score[0])
    print('Test Accuracy:',score[1])
     
     
    # STORE THE MODEL AS A PICKLE OBJECT
    pickle_out= open("model_trained.p","wb")  # wb = WRITE BYTE
    pickle.dump(model,pickle_out)
    pickle_out.close()
    cv2.waitKey(0)

谢谢你的帮助

0 个答案:

没有答案
相关问题