def keras_to_tensorflow(keras_model, output_dir, model_name, out_prefix="output_", log_tensorboard=True): if os.path.exists(output_dir) == False: os.mkdir(output_dir) out_nodes = [] for i in range(len(keras_model.outputs)): out_nodes.append(out_prefix + str(i + 1)) tf.identity(keras_model.output[i], out_prefix + str(i + 1)) # sess = K.get_session() sess = tf.keras.backend.get_session() graph_def = sess.graph.as_graph_def() from tensorflow.python.framework import graph_util, graph_io init_graph = sess.graph.as_graph_def() main_graph = graph_util.convert_variables_to_constants( sess, init_graph, out_nodes) graph_io.write_graph(main_graph, output_dir, name=model_name, as_text=False) if log_tensorboard: from tensorflow.python.tools import import_pb_to_tensorboard import_pb_to_tensorboard.import_to_tensorboard( # os.path.join(output_dir, model_name), output_dir, output_dir, '')
action_target = tf.slice(target, [0, Q_output_count], [-1, action_output_count], name = "action_slice_node") hidden_1 = Dense(x, hidden_count_1, tf.nn.relu, use_bias = True, kernel_initializer = tf.glorot_normal_initializer(), name = "hidden_1") Q_output_raw = tf.layers.dense(hidden_1, Q_output_count, use_bias = True, kernel_initializer = tf.zeros_initializer, bias_initializer = tf.zeros_initializer, name = 'Q_output_node') Q_output_ = tf.multiply(Q_output_raw, 100000) Q_output_ = tf.round(Q_output_) Q_output = tf.div(Q_output_, 100000) action_output_raw = tf.layers.dense(hidden_1, action_output_count, tf.nn.softmax, use_bias = True, kernel_initializer = tf.zeros_initializer, bias_initializer = tf.zeros_initializer, name = "action_output_node") action_output_ = tf.multiply(action_output_raw, 100000) action_output_ = tf.round(action_output_) action_output = tf.div(action_output_, 100000) prediction = tf.concat([Q_output, action_output], 1, name = "concat_node") prediction_identity = tf.identity(prediction, name = "prediction_node") Q_loss = tf.keras.losses.mean_squared_error(y_true = Q_target, y_pred = Q_output_raw) policy_loss = tf.keras.losses.categorical_crossentropy(y_true = action_target, y_pred = action_output_raw) total_loss = Q_loss + policy_loss train_op = tf.train.AdamOptimizer(learning_rate = learning_rate, name = "Optimizer").minimize(total_loss, name = 'optimize_node') init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) train_writer = tf.summary.FileWriter(path_to_store + "/summary", sess.graph) train_writer.close()
Tanh = tf.nn.tanh BatchNormalization = tf.layers.batch_normalization Dense = tf.layers.dense Dropout = tf.nn.dropout x = tf.placeholder(tf.float64, [None, input_count], name= 'input_node') Q_target = tf.placeholder(tf.float64, [None, output_count], name = "target_node") keep_prob = tf.placeholder(tf.float64, [], name = "keep_prob_node") learning_rate = tf.placeholder(tf.float64, [], name = "learning_rate_node") hidden_1 = Dense(x, hidden_count_1, tf.nn.relu, use_bias = True, kernel_initializer = tf.glorot_normal_initializer(), name = "hidden_1") hidden_2 = Dense(hidden_1, hidden_count_1, tf.nn.relu, use_bias = True, kernel_initializer = tf.glorot_normal_initializer(), name = "hidden_2") output = tf.layers.dense(hidden_2, output_count, tf.nn.tanh, use_bias = True, kernel_initializer = tf.zeros_initializer, bias_initializer = tf.zeros_initializer, name = 'output_node') prediction = tf.identity(output, name = "prediction_node") loss = tf.keras.losses.mean_squared_error(y_true = Q_target, y_pred = output) train_op = tf.train.AdamOptimizer(learning_rate = learning_rate, name = "Optimizer").minimize(loss, name ='optimize_node') init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) train_writer = tf.summary.FileWriter(path_to_store + "/summary", sess.graph) train_writer.close() with open(os.path.join(path_to_store, model_name + '.pb'), 'wb') as f: f.write(tf.get_default_graph().as_graph_def().SerializeToString())
model_name = sys.argv[1] input_count = int(sys.argv[2]) value_output_count = int(sys.argv[3]) action_output_count = int(sys.argv[4]) path_to_store = sys.argv[5] seed = int(sys.argv[6]) print("INITIALIZING TF MODEL WITH SEED " + str(seed)) tf.reset_default_graph() tf.random.set_random_seed(seed) x = tf.placeholder(tf.float64, [None, 2], name='input_node') target = tf.placeholder(tf.float64, [None, 1], name="target_node") prediction = tf.identity(x, name="prediction_node") init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) train_writer = tf.summary.FileWriter(path_to_store + "/summary", sess.graph) train_writer.close() with open(os.path.join(path_to_store, model_name + '.pb'), 'wb') as f: f.write(tf.get_default_graph().as_graph_def().SerializeToString()) # builder = tf.saved_model.builder.SavedModelBuilder("C:/Users/Snurka/init_model") # builder.add_meta_graph_and_variables( # sess, # [tf.saved_model.tag_constants.SERVING]