Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关于tf.layers.dense的问题_Python_Tensorflow - Fatal编程技术网

Python 关于tf.layers.dense的问题

Python 关于tf.layers.dense的问题,python,tensorflow,Python,Tensorflow,我最近才开始学习tensorflow。做一些练习时,会出现一个问题。 对于构建隐藏层,我知道有两种方法可以定义 通过使用tf.layers.dense定义完全连接层 e、 g layer_1=tf.layers.density(X,512,activation=tf.nn.relu) 第2层=tf.layers.density(第1256层,激活=tf.nn.relu) 通过使用直接矩阵乘法tf.add(tf.matmul(X,W),b)来定义层 e、 g: w1=tf.变量(tf.随机正常值(

我最近才开始学习tensorflow。做一些练习时,会出现一个问题。 对于构建隐藏层,我知道有两种方法可以定义

  • 通过使用tf.layers.dense定义完全连接层 e、 g

    layer_1=tf.layers.density(X,512,activation=tf.nn.relu) 第2层=tf.layers.density(第1256层,激活=tf.nn.relu)

  • 通过使用直接矩阵乘法tf.add(tf.matmul(X,W),b)来定义层 e、 g:

    w1=tf.变量(tf.随机正常值([输入大小,输出大小])

    b1=

    w2=

    b2=

    第1层=tf.add(tf.matmul(x,w1),b1) 第1层=tf.nn.relu(relu) 层_2=tf.add(tf.matmul(层_1,w2),b2) 层2=tf.nn.relu(层2)

  • 我尝试了这两种方法来构建多层神经网络,两者都可以工作。 我的问题:它们之间有区别吗? 我的猜测是:1)在方法2中,W,b可以由tensorboard监控,因为它们是明确定义的


    感谢您的反馈。谢谢

    您的第一种方法将使用
    tf.glorot\u uniform\u初始值设定项
    在和中提到的默认情况下初始化权重,因此性能可能略有不同。我认为您也可以使用第一种方法来监控权重。

    您的第一种方法将使用
    tf.glorot\u uniform\u初始值设定项
    来默认初始化权重,如和中所述,因此性能可能略有不同。我认为您也可以使用第一种方法来监控权重。

    使用
    tf.layers
    与通过创建
    W
    b
    矩阵,然后执行
    tf.matmul
    tf.add
    来定义您自己的层绝对没有区别。例如,第一个代码段:

    tf.reset_default_graph()
    tf.set_random_seed(42)
    X = tf.ones((5,4), dtype=tf.float32)
    init = tf.initializers.random_uniform(minval=-0.1, maxval=0.1, dtype=tf.float32)
    logits_first = tf.layers.dense(inputs = X, units = 7, kernel_initializer=init, 
    bias_initializer=init)
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    sess.run(logits_first)
    
    计算结果与第二个代码段的值相同:

    tf.reset_default_graph()
    tf.set_random_seed(42)
    X = tf.ones((5,4), dtype=tf.float32)
    W = tf.Variable(tf.random_uniform([4, 7], -0.1, 0.1), dtype=tf.float32)
    b = tf.Variable(tf.random_uniform([7], -0.1, 0.1), dtype=tf.float32)
    logits_second = tf.add(tf.matmul(X, W), b)
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    sess.run(logits_second)
    

    此外,您可以监视这两种方法。可以在tensorboard中监控图形创建中定义的所有内容。

    使用
    tf.layers
    与通过创建
    W
    b
    矩阵,然后执行
    tf.matmul
    tf.add
    来定义您自己的层绝对没有区别。例如,第一个代码段:

    tf.reset_default_graph()
    tf.set_random_seed(42)
    X = tf.ones((5,4), dtype=tf.float32)
    init = tf.initializers.random_uniform(minval=-0.1, maxval=0.1, dtype=tf.float32)
    logits_first = tf.layers.dense(inputs = X, units = 7, kernel_initializer=init, 
    bias_initializer=init)
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    sess.run(logits_first)
    
    计算结果与第二个代码段的值相同:

    tf.reset_default_graph()
    tf.set_random_seed(42)
    X = tf.ones((5,4), dtype=tf.float32)
    W = tf.Variable(tf.random_uniform([4, 7], -0.1, 0.1), dtype=tf.float32)
    b = tf.Variable(tf.random_uniform([7], -0.1, 0.1), dtype=tf.float32)
    logits_second = tf.add(tf.matmul(X, W), b)
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
    sess.run(logits_second)
    
    此外,您可以监视这两种方法。可以在tensorboard中监视图形创建中定义的所有内容