Tensorflow:为什么没有激活函数的单个神经网络节点的结果与我自己的计算不同?

哈利

我创建了一个具有 3 个输入和一个输出的单个节点,偏置为 0,没有激活函数。据我所知,这里唯一发生的事情是输入向量和随机初始化权重之间的矩阵乘法,但是当我自己用相同的输入和权重进行乘法时,我得到了不同的结果?我错过了什么/做错了什么?

提前致谢!

我的计算基于这里提供的一些代码

这是代码:

def example_code(self):
    import tensorflow as tf

    data = [[1.0,2.0,3.0]]
    x = tf.placeholder(tf.float32,shape=[1,3],name="mydata")
    node = tf.layers.Dense(units=1)
    y = node(x)
    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)
    print("input: "+str(data))
    outcome = sess.run(y,feed_dict={x:data})
    #print("outcome from tensorflow: "+str(outcome))
    weights = node.get_weights()[0]
    bias = node.get_weights()[1]
    print("weights: "+str(weights))
    print("bias: "+str(bias))
    print("outcome from tensorflow: " + str(outcome))
    outcome = tf.matmul(data,weights)
    print("manually calculated outcome: "+str(sess.run(outcome)))

代码输出:

input: [[1.0, 2.0, 3.0]]
weights: [[ 0.72705185] [-0.70188504] [ 0.5336163 ]]
bias: [0.]
outcome from tensorflow: [[-1.3463312]]
manually calculated outcome: [[0.9241307]]
杰德赫萨

问题是tf.layers不使用 uses 不使用您的 session sess这反过来导致权重的不同初始化,因此两个不同的值。tf.layers最终tf.keras.backend.get_session()用于检索用于初始化和检索权重 ( node.get_weights())的会话tf.keras.backend.get_session()如果有,则尝试使用默认会话,如果没有,则创建自己的会话。在这种情况下,sess未配置为默认会话(仅tf.InteractiveSession在构建时自动配置为默认会话)。最简单的解决方法是以tf.Session推荐的方式使用,作为上下文管理器:

def example_code(self):
    import tensorflow as tf
    with tf.Session() as sess:
        data = [[1.0,2.0,3.0]]
        x = tf.placeholder(tf.float32,shape=[1,3],name="mydata")
        node = tf.layers.Dense(units=1)
        y = node(x)
        init = tf.global_variables_initializer()
        sess.run(init)
        print("input: "+str(data))
        outcome = sess.run(y,feed_dict={x:data})
        #print("outcome from tensorflow: "+str(outcome))
        weights = node.get_weights()[0]
        bias = node.get_weights()[1]
        print("weights: "+str(weights))
        print("bias: "+str(bias))
        print("outcome from tensorflow: " + str(outcome))
        outcome = tf.matmul(data,weights)
        print("manually calculated outcome: "+str(sess.run(outcome)))

这将设置sess为默认会话,并且还将确保在函数完成时释放其资源(这是您代码中的另一个问题)。如果出于某种原因您想使用某个会话作为默认值但不想使用上下文管理器关闭它,您可以使用as_default()

def example_code(self):
    import tensorflow as tf
    sess = tf.Session():
    with sess.as_default():
        data = [[1.0,2.0,3.0]]
        x = tf.placeholder(tf.float32,shape=[1,3],name="mydata")
        node = tf.layers.Dense(units=1)
        y = node(x)
        init = tf.global_variables_initializer()
        sess.run(init)
        print("input: "+str(data))
        outcome = sess.run(y,feed_dict={x:data})
        #print("outcome from tensorflow: "+str(outcome))
        weights = node.get_weights()[0]
        bias = node.get_weights()[1]
        print("weights: "+str(weights))
        print("bias: "+str(bias))
        print("outcome from tensorflow: " + str(outcome))
        outcome = tf.matmul(data,weights)
        print("manually calculated outcome: "+str(sess.run(outcome)))
    # You need to manually ensure that the session gets closed after
    sess.close()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tensorflow Keras RMSE指标返回的结果与我自己构建的RMSE损失函数不同

来自分类Dev

为什么我们在卷积神经网络的卷积层之后使用激活函数?

来自分类Dev

我的神经网络有更好的激活函数吗?

来自分类Dev

为什么我的人工神经网络没有学习?

来自分类Dev

如何计算人工神经网络的激活函数的导数

来自分类Dev

为什么神经网络中的激活函数取这么小的值?

来自分类Dev

为什么GridSearchCV模型结果与我手动调整的模型不同?

来自分类Dev

神经网络的激活函数选择

来自分类Dev

神经网络和激活函数的选择

来自分类Dev

结果与我搜索的结果不同

来自分类Dev

为什么我从同一个神经网络模型得到不同的预测?

来自分类Dev

为什么几乎每个激活函数都会在神经网络中的负输入值处饱和

来自分类Dev

为什么这个与门神经网络没有朝着最佳权重发展?

来自分类Dev

结果与我期望的不同

来自分类Dev

为什么我的神经网络不训练?

来自分类Dev

为什么我非常简单的神经网络表现不佳?

来自分类Dev

从不同的成本函数和神经网络的激活函数中进行选择

来自分类Dev

人工神经网络 - 为什么通常在隐藏层使用 sigmoid 激活函数而不是 tanh-sigmoid 激活函数?

来自分类Dev

我的线性回归神经网络有什么问题

来自分类Dev

我的神经网络模型有什么问题?

来自分类Dev

np.linalg.det()的结果与我的计算结果不同

来自分类Dev

将激活函数放置在神经网络架构中的什么位置?

来自分类Dev

非线性激活函数在神经网络的基本层面上做什么?

来自分类Dev

神经网络中密集层之后的激活函数有多必要?

来自分类Dev

没有微积分的神经网络

来自分类Dev

为什么我在main中取消引用后的指针与我在自己的自定义函数中取消引用后的指针有不同的值?

来自分类Dev

为什么Elasticsearch给我的结果与我的查询不匹配

来自分类Dev

为什么我的awk结果与示例不同?

来自分类Dev

具有偏差更新的神经网络S型激活

Related 相关文章

  1. 1

    Tensorflow Keras RMSE指标返回的结果与我自己构建的RMSE损失函数不同

  2. 2

    为什么我们在卷积神经网络的卷积层之后使用激活函数?

  3. 3

    我的神经网络有更好的激活函数吗?

  4. 4

    为什么我的人工神经网络没有学习?

  5. 5

    如何计算人工神经网络的激活函数的导数

  6. 6

    为什么神经网络中的激活函数取这么小的值?

  7. 7

    为什么GridSearchCV模型结果与我手动调整的模型不同?

  8. 8

    神经网络的激活函数选择

  9. 9

    神经网络和激活函数的选择

  10. 10

    结果与我搜索的结果不同

  11. 11

    为什么我从同一个神经网络模型得到不同的预测?

  12. 12

    为什么几乎每个激活函数都会在神经网络中的负输入值处饱和

  13. 13

    为什么这个与门神经网络没有朝着最佳权重发展?

  14. 14

    结果与我期望的不同

  15. 15

    为什么我的神经网络不训练?

  16. 16

    为什么我非常简单的神经网络表现不佳?

  17. 17

    从不同的成本函数和神经网络的激活函数中进行选择

  18. 18

    人工神经网络 - 为什么通常在隐藏层使用 sigmoid 激活函数而不是 tanh-sigmoid 激活函数?

  19. 19

    我的线性回归神经网络有什么问题

  20. 20

    我的神经网络模型有什么问题?

  21. 21

    np.linalg.det()的结果与我的计算结果不同

  22. 22

    将激活函数放置在神经网络架构中的什么位置?

  23. 23

    非线性激活函数在神经网络的基本层面上做什么?

  24. 24

    神经网络中密集层之后的激活函数有多必要?

  25. 25

    没有微积分的神经网络

  26. 26

    为什么我在main中取消引用后的指针与我在自己的自定义函数中取消引用后的指针有不同的值?

  27. 27

    为什么Elasticsearch给我的结果与我的查询不匹配

  28. 28

    为什么我的awk结果与示例不同?

  29. 29

    具有偏差更新的神经网络S型激活

热门标签

归档