#python #tensorflow #keras #deep-learning
#python #тензорный поток #keras #глубокое обучение
Вопрос:
Привет, когда я запускаю свой код с CNN_1() внутри, он работает нормально и вылетает (Kerniel умер в Spyder, бесконечно вычисляя в оболочке), когда я пытаюсь загрузить свою модель с помощью keras.models.load_model().
И когда я не использую 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
Когда я вычисляю каждое определение, ошибки нет, тогда, если я вызываю 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 (с anaconda)
Драйвер Nvidia 430,64
4 GPU TITAN X
Если вам нужна какая-либо другая вещь, не стесняйтесь спрашивать. Спасибо и извините за мой английский.
Ответ №1:
Ну, я просто перезагружаю компьютер во второй раз, и он «работает» с Spyder. В первый раз, когда я тренируюсь или загружаю модель, все в порядке, но следующее действие с использованием модели приводит к сбою моего ядра. Например, когда я делаю model.fit(), это работает, тогда я делаю model=models.load(), он вылетает.
Он продолжает сбой («Ошибка сегментации (сброс ядра)»), когда я запускаю код в оболочке (просто компилирую модели).