此函数如何创建深度神经网络,而不仅仅是重命名相同的变量?

我正在从Geron的“机器学习动手”中自我学习,对此功能(如何在下一页的框[114]中创建)如何创建一个深度神经网络感到有些困惑。


https://github.com/ageron/handson-ml/blob/master/11_deep_learning.ipynb


he_init = tf.variance_scaling_initializer()


def dnn(inputs, n_hidden_layers=5, n_neurons=100, name=None,

        activation=tf.nn.elu, initializer=he_init):

    with tf.variable_scope(name, "dnn"):

        for layer in range(n_hidden_layers):

            inputs = tf.layers.dense(inputs, n_neurons, activation=activation,

                                     kernel_initializer=initializer,

                                     name="hidden%d" % (layer + 1))

        return inputs

看起来每次都使用不同的名称重置相同的输入。有人可以解释这是如何创建深度神经网络的吗?


蓝山帝景
浏览 121回答 1
1回答

幕布斯6054654

关于TensorFlow中的模型构建存在强烈的误解。建议您在官方指南中阅读有关TensorFlow的计算图和该API的其他低级详细信息的更多信息。使用TensorFlow构建的操作未绑定到Python变量(假设对于此答案,我们不在Eager模式下)。当调用中的层构造函数之一tf.layers(或中的其他基本函数,例如中的tf.nn)时,这会将新操作添加到当前活动的图形中,并返回Tensor与该层的输出相对应的图。删除或更改用于保留这些张量的Python变量的内容时,这些操作不会消失。该函数的dnn作用是迭代创建一系列密集层。在每个步骤中,该变量inputs都会更改为指向最新创建的图层的输出,从而可以将其“馈入”到下一个图层。是否使用与原始输入相同的变量或为此使用新的变量是一个意见问题(我经常net自己使用一个新变量)。默认情况下,这将导致5个完全连接的层的序列。在所有这一切中,只构建了图。此处实际没有应用网络训练或权重初始化过程。这也可以通过视觉验证。以下代码会将图形的签名写入TensorFlow摘要文件:he_init = tf.variance_scaling_initializer()def dnn(inputs, n_hidden_layers=5, n_neurons=100, name=None,        activation=tf.nn.elu, initializer=he_init):    with tf.variable_scope(name, "dnn"):        for layer in range(n_hidden_layers):            inputs = tf.layers.dense(inputs, n_neurons, activation=activation,                                     kernel_initializer=initializer,                                     name="hidden%d" % (layer + 1))        return inputsx = tf.placeholder(tf.float32, [32, 128])y = dnn(x)writer = tf.summary.FileWriter(logdir='mydnn', graph=tf.get_default_graph())writer.flush()通过使用TensorBoard打开相同的日志目录,我们得到下图:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python