keras tensorflow荷载重量失效

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

我正在使用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 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会话设置为它,正如我在问题中提到的。我这样做是为了给我的课程的随机数生成器植入种子,以确保结果的可再现性。似乎当我加载模型时,图形没有与导致异常的会话相关联