python — Tensorflow / Keras сохраненная модель загружена необученным Переполнение стека

Я в основном следовал этот отвечает на пример того, как сохранить модель в Python и загрузить ее в C ++. Мой код ниже. Никаких ошибок не выдается \ всплывает в статусе TF во время процесса загрузки. Однако, когда я запускаю логический вывод с моей моделью, результаты будут идентичны тем, которые выводит модель Python до того, как она будет обучена. Я считаю, что проблема возникает либо при сохранении модели, либо при загрузке.

Вот мой обобщенный код обучения / сохранения Python:

model = tf.keras.Sequential([
tf.keras.layers.Convolution2D(filters, (5, 5), input_shape=(7, 19, 19), data_format='channels_first', name='Input'),
tf.keras.layers.MaxPooling2D(pool_size=(2,2), name='Pool0'),
tf.keras.layers.Flatten(name='Flatten0'),
tf.keras.layers.Dense(BoardSize, activation='softmax', name='Output'),
])

optimizer = tf.train.AdamOptimizer(learning_rate=0.0018)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

# Train the model
# Do I need to save checkpoints here with a callback?
history = model.fit_generator(generator=gen.generator(),
steps_per_epoch=gen.stepsPerEpoch(),
validation_data=valGen.generator(),
validation_steps=valGen.stepsPerEpoch(),
epochs=numEpochs)

# Save the model
K.set_learning_phase(0)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver(tf.global_variables())
saver.save(sess, './models/latestModel')

Вот мой код загрузки графиков / весов C ++, который не дает ошибок состояния и должен загружать сохраненные веса, верно?

static const std::string pathToCheckpoint = "Models/PolicyModel/latestModel";
static const std::string pathToGraph = pathToCheckpoint + ".meta";

// Set memory growth manually. Resolves and issue with tf 1.5 for windows
double memFraction = 1.0;
bool allowMemGrowth = true;
options.config.mutable_gpu_options()->set_allow_growth(allowMemGrowth);
options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(memFraction);

session = tf::NewSession(options);
if (!session)
throw std::runtime_error("Could no create Tensorflow Session!");

// Read in the protobuf
status = tf::ReadBinaryProto(tf::Env::Default(), pathToGraph, &graphDef);
if (!status.ok())
throw std::runtime_error("Error reading graph: " + status.ToString());

status = session->Create(graphDef.graph_def());
if (!status.ok())
throw std::runtime_error("Error creating graph: " + status.ToString());

// Read the weights
tf::Tensor checkpointPathTensor(tf::DT_STRING, tf::TensorShape());
checkpointPathTensor.scalar<std::string>()() = pathToCheckpoint;

status = session->Run(
{ { graphDef.saver_def().filename_tensor_name(), checkpointPathTensor }, },
{},
{ graphDef.saver_def().restore_op_name() },
nullptr
);

if (!status.ok())
throw std::runtime_error("Error loading checkpoint from " + pathToCheckpoint + ": " + status.ToString());

Я также могу опубликовать код логического вывода, сначала я его опускаю, чтобы он был относительно коротким. У кого-нибудь есть идеи относительно того, что может пойти не так? Правильно ли я сохраняю модель + веса или пропустил шаг? Весы загружаются правильно с C ++?

Я попробовал другой метод сохранения / загрузки графика, Вот но не удалось загрузить график, сохраненный с помощью этого метода.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]