python - TensorFlow 中如何使用 Graph 制作模型
问题描述
我试图了解如何在 tensorflow 中制作以下模型。我更习惯于看到使用 Tensorflow.kera.Sequential() 制作的多层感知器。如果有人可以解释模型是如何创建的,或者如何找到有关其架构的更多信息——比如 model.summary()——我将非常感激。谢谢!
来源:https ://github.com/github/CodeSearchNet/blob/master/src/models/model.py
该类的完整定义可以在上面的链接中找到。
def make_model(self, is_train: bool):
with self.__sess.graph.as_default():
random.seed(self.hyperparameters['seed'])
np.random.seed(self.hyperparameters['seed'])
tf.set_random_seed(self.hyperparameters['seed'])
self._make_model(is_train=is_train)
self._make_loss()
if is_train:
self._make_training_step()
self.__summary_writer = tf.summary.FileWriter(self.__tensorboard_dir, self.__sess.graph)
def _make_model(self, is_train: bool) -> None:
"""
Create the actual model.
Note: This has to create self.ops['code_representations'] and self.ops['query_representations'],
tensors of the same shape and rank 2.
"""
self.__placeholders['dropout_keep_rate'] = tf.placeholder(tf.float32,
shape=(),
name='dropout_keep_rate')
self.__placeholders['sample_loss_weights'] = \
tf.placeholder_with_default(input=np.ones(shape=[self.hyperparameters['batch_size']],
dtype=np.float32),
shape=[self.hyperparameters['batch_size']],
name='sample_loss_weights')
with tf.variable_scope("code_encoder"):
language_encoders = []
for (language, language_metadata) in sorted(self.__per_code_language_metadata.items(), key=lambda kv: kv[0]):
with tf.variable_scope(language):
self.__code_encoders[language] = self.__code_encoder_type(label="code",
hyperparameters=self.hyperparameters,
metadata=language_metadata)
language_encoders.append(self.__code_encoders[language].make_model(is_train=is_train))
self.ops['code_representations'] = tf.concat(language_encoders, axis=0)
with tf.variable_scope("query_encoder"):
self.__query_encoder = self.__query_encoder_type(label="query",
hyperparameters=self.hyperparameters,
metadata=self.__query_metadata)
self.ops['query_representations'] = self.__query_encoder.make_model(is_train=is_train)
code_representation_size = next(iter(self.__code_encoders.values())).output_representation_size
query_representation_size = self.__query_encoder.output_representation_size
assert code_representation_size == query_representation_size, \
f'Representations produced for code ({code_representation_size}) and query ({query_representation_size}) cannot differ!'
解决方案
如果你想得到模型架构,你可以简单地使用 tensorboard。正如你在这一行中看到的,
self.__summary_writer = tf.summary.FileWriter(self.__tensorboard_dir, self.__sess.graph)
它将会话图写入该self.__tensorboard_dir
位置的文件。您只需要启动张量板并通过给定的 url 访问它。
要启动 tensorboard,请打开终端并使用此命令。
tensorboard --logdir="<file path (url of self.__tensorboard_dir)>"
这将启动服务器并显示 tensorboard 的 URL。在 tensorboard 中,您有Graph选项卡,它将显示整个架构。
推荐阅读
- python - 即使行列式为零,我也会得到矩阵的逆
- json - 将 nasaAPI 与示例参数一起使用
- amazon-web-services - SQL Server 2008 到 Amazon RDS SQL
- javascript - 使用 Javascript 重定向到桌面/移动版本的相应页面
- java - How to fix Failed to open native connection to Cassandra at {server ip}:9042
- django - 在 django 视图中使用“_startswith”过滤器查询时如何修复“django.core.exceptions.FieldError:”?
- javascript - 多个谷歌地图无法正常工作
- reactjs - 如何创建不带导航栏的登录页面和带导航栏的登录页面?
- java - 在 Java 中使用 Kotlin 库
- angular - 子级不渲染父级传递的模板