Python 使用keras时崩溃?还是在加载模型时?

Python 使用keras时崩溃?还是在加载模型时?,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,您好,当我运行带有CNN_1()的代码时,它运行良好,当我尝试用keras.models.load_model()加载我的模型时,它崩溃了(Kerniel死于Spyder,在shell中无休止地计算) 当我不直接使用CNN_1()时,我只是在一个交互式python中计算我的所有函数,然后计算CNN_1(),它就会崩溃。我看不出作为一个团队或单独执行任何事情之间有什么区别,但似乎有区别 我想这可能是由于某个错误版本的东西造成的,但我检查了所有的东西,一切都好。 这是我的代码,最后是我的配置 imp

您好,当我运行带有CNN_1()的代码时,它运行良好,当我尝试用keras.models.load_model()加载我的模型时,它崩溃了(Kerniel死于Spyder,在shell中无休止地计算)

当我不直接使用CNN_1()时,我只是在一个交互式python中计算我的所有函数,然后计算CNN_1(),它就会崩溃。我看不出作为一个团队或单独执行任何事情之间有什么区别,但似乎有区别

我想这可能是由于某个错误版本的东西造成的,但我检查了所有的东西,一切都好。 这是我的代码,最后是我的配置

import tensorflow as tf
import os, os.path
import numpy as np 
import cv2
from keras.callbacks import ModelCheckpoint, EarlyStopping

from keras import layers, models
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator
import keras.backend as K
import matplotlib.pyplot as plt

def mask_make(xt):
    t = layers.MaxPooling2D((2,2),strides=(2,2))(xt)
    t= layers.UpSampling2D()(t)

    bool_mask = K.greater_equal(xt,t)
    mask = K.cast(bool_mask,dtype='float32')

    mask_input= layers.Input(tensor=mask)
    return mask_input

def C_for_softmax(x):
    return K.sum(K.exp(x))

def inv_softmax(x,C):
    return K.log(x)+K.log(C_for_softmax(x))

def CNN_1_layers(inputs):

    #block 1
    x = layers.Conv2D(16,5,5, activation='relu', input_shape=(128,128,1),border_mode='valid')(inputs)
    m.append(mask_make(x))
    x = layers.MaxPooling2D((2,2))(x)
    x = layers.BatchNormalization()(x)
    #block 2
    x = layers.Conv2D(32,5,5, activation='relu',border_mode='valid')(x)
    m.append(mask_make(x))
    x = layers.MaxPooling2D((2,2))(x)
    x = layers.BatchNormalization()(x)
    #block 3
    x = layers.Conv2D(64,6,6, activation='relu',border_mode='valid')(x)
    m.append(mask_make(x))
    x = layers.MaxPooling2D((2,2))(x)
    x = layers.BatchNormalization()(x)
    #block 4
    x = layers.Conv2D(128,5,5, activation='relu',border_mode='valid')(x)
    m.append(mask_make(x))
    x = layers.MaxPooling2D((2,2))(x)
    x = layers.BatchNormalization()(x)
    #block sortie
    x = layers.Dropout(0.5)(x)
    x = layers.Conv2D(10,4,4, activation='relu',border_mode='valid')(x)
    x = layers.Flatten(input_shape=(1,1,10))(x)
    C.append(C_for_softmax(x))
    x = layers.Dense(10,activation='softmax')(x)

    return x

def CNN_1():
    inputs = layers.Input(shape=(128,128,1),name="input_CNN")
    layers_CNN = CNN_1_layers(inputs)
    model_conv = models.Model(inputs,layers_CNN,name='CNN_1')
    model_conv.compile(loss='categorical_crossentropy', optimizer= Adam(), metrics=["accuracy"])
    model_conv.summary()
    return model_conv

def apprentissage(model,nb_epoch=100):
    checkpoint = ModelCheckpoint(filepath="CNN_1.h5",monitor='val_acc', save_best_only=True, save_weights_only=False, mode='auto')
    early= EarlyStopping(monitor='val_loss',min_delta=0,patience=100,verbose=1,mode='auto')
    hist= model.fit(train_X, train_y, batch_size=128, nb_epoch=nb_epoch, validation_data=(test_X,test_y), callbacks=[early, checkpoint])
    model = models.load_model("CNN_1.h5")
    return hist

def load():
    model = models.load_model("CNN_1.h5")
    return model
当我计算每个def时都没有错误,如果我调用CNN_1(),它就会崩溃。 但是,如果我将CNN_1()放在def的代码末尾,并将所有内容计算在一起,那么当我运行load()时,它就会工作并崩溃

我的配置:

Keras 2.3.1

tensorflow 2.1.0

CUDA 10.1

CUDNN 7.6.4.38

Python 3.6.8(带蟒蛇)

Nvidia驱动程序430.64

4 GPU泰坦X

如果你还需要什么,尽管问吧。
感谢并为我的英语感到抱歉。

我刚刚重新启动了计算机,它与Spyder一起“工作”。 第一次训练或加载模型时,一切正常,但下一次使用模型的操作会使内核崩溃。 例如,当我执行model.fit()时,它工作,然后执行model=models.load()时,它崩溃

当我在shell中运行代码(只是编译模型)时,它不断崩溃(“分段错误(内核转储)”