Código de salida deficiente al administrar varias sesiones
Tengo un problema extraño al entrenar modelos contf.Graph
ytf.Session
. Y la implementación es algo extraña, así que tengan paciencia conmigo. Me gustaría explicar la estructura de la aplicación.
El problema ha sido finalmente (y algo embarazoso)resuelt actualizando todos los paquetes.
SolicituLa aplicación es un servicio para manejar múltiples redes neuronales: entrenarlas y hacer predicciones sobre ellas. Por esta razón, un solo gráfico no era suficiente. Entonces, al crear un nuevo modelo, primero inicializo ambasGraph
y unSession
al igual que
def __init__(self):
self.graph = tf.Graph()
with self.graph.as_default():
self.session = tf.Session()
uego, se utilizan tanto en el proceso de capacitación como al cargar un modelo desde el disco.
def fit(self, x_train, y_train, n=200, batch=256):
with self.graph.as_default():
with self.session.as_default():
self.model.fit(x_train, y_train, epochs=n, batch_size=batch, verbose=0)
Aquí es donde ocurre el problema (he logrado comentar todo uno por uno, y el método de ajuste es donde está), pero para más contexto, aquí también está el método de creación (despojado). Utiliza Keras.
def create(self):
with self.graph.as_default():
with self.session.as_default():
self.model = Sequential()
self.model.add(Dense(64, input_dim=shape[0], activation='relu',
kernel_regularizer=reg.l1_l2(0.1, 0.2)))
self.model.add(Dropout(0.5))
self.model.add(Dense(1, activation='sigmoid', kernel_regularizer=reg.l1_l2(0.1, 0.2)))
self.model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
Problem Al inicializar la red y ajustarla con datos, el proceso sale con un código incorrecto:0xC0000005
. Esto no da mucha información sobre el problema en sí, y el código de salida incorrecto se da en ese momento, al salir. @ Incluso aprint
a instrucción @ se ejecuta con éxito después de las rutinas. Esto me ha llevado a sospechar que no es un problema con la implementación, sino algo más.
Estoy usando Python 3.6.5 en PyCharm, pero el problema ha ocurrido incluso cuando se ejecuta desde una línea de comandos. Como dije, hay varios modelos malabarizados, pero un entrenamiento es suficiente para chocar.
¿Qué podría ser la culpa aquí? Me doy cuenta de que no es un problema tan reproducible, pero agradecería mucho cualquier indicador que apuntara incluso a la depuración.
Aventuras Intenté modificar elfit
función de acuerdo conesta respuesta, pero sin suerte. Aquí está la versión modificada:
from keras import backend as K
import gc
def fit(self, x_train, y_train, n=20, batch=256):
K.set_session(self.session)
with self.graph.as_default():
with self.session.as_default():
self.model.fit(x_train, y_train, epochs=n*10, batch_size=batch, verbose=0)
K.clear_session()
gc.collect()
Next Traté de crear una nueva sesión para cada cálculo tf.Session(graph=self.graph)
). Funcionó al usar elcg.collect()
, pero después de entrenar al modelo, no pude hacer predicciones con una nueva sesión. @tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value dense_1/bias
Actualmente (8 de noviembre) Estoy liberando todos los recursos posibles antes de crear y al cargar un modelo. Esto ha tenido el efecto de que puedo crear el modelo una vez, pero la segunda vez (hago dos pases de entrenamiento para evaluar el modelo de forma independiente) el programa se bloquea como antes. Probemos una nueva pregunta, esto se está yendo de las manos. @Q v.2