keras tensorflow荷载重量失效
我正在使用keras 1.2和tensorflow 1.0.0后端 我有一个函数,它从json加载预先校准的模型,然后从hdf5文件加载其权重keras tensorflow荷载重量失效,tensorflow,keras,Tensorflow,Keras,我正在使用keras 1.2和tensorflow 1.0.0后端 我有一个函数,它从json加载预先校准的模型,然后从hdf5文件加载其权重 def load(): model = model_from_json(open(model_path).read()) model.load_weights(model_weights_path) 此函数,更准确地说,调用load\u weights会导致以下异常: RuntimeError: The Session graph is
def load():
model = model_from_json(open(model_path).read())
model.load_weights(model_weights_path)
此函数,更准确地说,调用load\u weights
会导致以下异常:
RuntimeError: The Session graph is empty. Add operations to the graph before calling run()
我想知道这是否是由于我在模块开始部分设置tensorflow种子的再现性:
tf.set_random_seed(123) # To set Tensorflow seed
sess = tf.Session()
keras.backend.set_session(sess)
keras会话似乎不会自动将加载的模型设置为与会话关联的图形,因此无法初始化权重
有什么解释和解决方法可以避免这种异常吗?我使用的代码与您的代码基本相同,对我来说也适用
from keras.models import Sequential
from keras.models import Model
from keras.layers import Dense, Dropout, Activation, Flatten, Input, GlobalAveragePooling2D
from keras.optimizers import RMSprop
from keras.utils import np_utils
from keras.models import model_from_json
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers.pooling import AveragePooling2D
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import ZeroPadding2D
from keras.engine.topology import Merge
from keras.layers import merge
from keras.optimizers import Adam
from keras import backend as K
from keras.layers.pooling import MaxPooling2D
from keras.layers.convolutional import ZeroPadding2D
import PIL
import inception
import tensorflow as tf
import keras
import glob
import pandas as pd
import pickle
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# load json and create model
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
# load weights into new model
model.load_weights("model.h5")
print("Loaded model from disk")
model.summary()
model.compile(Adam(lr=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])
score = model.predict(transfer_values_test)
我使用的代码和你的差不多,对我来说很有用
from keras.models import Sequential
from keras.models import Model
from keras.layers import Dense, Dropout, Activation, Flatten, Input, GlobalAveragePooling2D
from keras.optimizers import RMSprop
from keras.utils import np_utils
from keras.models import model_from_json
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers.pooling import AveragePooling2D
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import ZeroPadding2D
from keras.engine.topology import Merge
from keras.layers import merge
from keras.optimizers import Adam
from keras import backend as K
from keras.layers.pooling import MaxPooling2D
from keras.layers.convolutional import ZeroPadding2D
import PIL
import inception
import tensorflow as tf
import keras
import glob
import pandas as pd
import pickle
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# load json and create model
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
# load weights into new model
model.load_weights("model.h5")
print("Loaded model from disk")
model.summary()
model.compile(Adam(lr=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])
score = model.predict(transfer_values_test)
事实上,在加载模型时,Keras似乎不尊重set_session设置的会话 尝试通过Tensorflow的上下文管理器强制Keras使用特定会话:
def load():
with sess.as_default():
model = model_from_json(open(model_path).read())
model.load_weights(model_weights_path)''
如果Keras仍然抱怨,则预定义一个图(graph=tf.graph()
),并通过引入附加的with
语句强制model.load\u权重使用它:
def load():
with graph.as_default():
with sess.as_default():
model = model_from_json(open(model_path).read())
model.load_weights(model_weights_path)''
事实上,在加载模型时,Keras似乎不尊重set_session设置的会话 尝试通过Tensorflow的上下文管理器强制Keras使用特定会话:
def load():
with sess.as_default():
model = model_from_json(open(model_path).read())
model.load_weights(model_weights_path)''
如果Keras仍然抱怨,则预定义一个图(graph=tf.graph()
),并通过引入附加的with
语句强制model.load\u权重使用它:
def load():
with graph.as_default():
with sess.as_default():
model = model_from_json(open(model_path).read())
model.load_weights(model_weights_path)''
您是否可以检查并再次检查您是否已从model_path.data读取数据。如果我切换后端到theano,一切都很好。问题来自我为再现性目的设置为Keras的会话。当我加载模型时,它与该会话没有关联。您可以检查并再次检查是否确实从模型读取了数据。\u path.data读取已完成。如果我切换后端到theano,一切都很好。问题来自我为再现性目的设置为Keras的会话。当我加载模型时,它与该会话无关。区别在于,在模块开始时,我创建了一个tensorflow会话,并将keras会话设置为它,正如我在问题中提到的。我这样做是为了给我的课程的随机数生成器植入种子,以确保结果的可再现性。当我加载模型时,图形似乎没有与导致异常的会话关联。区别在于,在模块开始时,我创建了一个tensorflow会话,并将keras会话设置为它,正如我在问题中提到的。我这样做是为了给我的课程的随机数生成器植入种子,以确保结果的可再现性。似乎当我加载模型时,图形没有与导致异常的会话相关联