【问题标题】:tf.GradientTape() returns None value for my neural network functiontf.GradientTape() 为我的神经网络函数返回 None 值
【发布时间】:2021-07-24 16:10:09
【问题描述】:

所以我创建了自己的神经网络,我想针对输入变量对其进行自动微分。我的神经网络代码是这样的

n_input = 1     
n_hidden_1 = 50 
n_hidden_2 = 50 
n_output = 1 

weights = {
'h1': tf.Variable(tf.random.normal([n_input, n_hidden_1],0,0.5)),
'h2': tf.Variable(tf.random.normal([n_hidden_1, n_hidden_2],0,0.5)),
'out': tf.Variable(tf.random.normal([n_hidden_2, n_output],0,0.5))
}

biases = {
'b1': tf.Variable(tf.random.normal([n_hidden_1],0,0.5)),
'b2': tf.Variable(tf.random.normal([n_hidden_2],0,0.5)),
'out': tf.Variable(tf.random.normal([n_output],0,0.5))
}

def multilayer_perceptron(x):
    x = np.array([[[x]]],  dtype='float32')
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.tanh(layer_1)
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.tanh(layer_2)
    output = tf.matmul(layer_2, weights['out']) + biases['out']
    return output

对于tf.GradientTape(),我试图用这个来区分神经网络

x = tf.Variable(1.0)
with tf.GradientTape() as tape:
    y = multilayer_perceptron(x)
dNN1 = tape.gradient(y,x)
print(dNN1)

哪个结果None。我在这里做错了什么?

【问题讨论】:

    标签: python tensorflow automatic-differentiation gradienttape


    【解决方案1】:

    因为您将 x 转换为不可微分的 np.array 的 numpy 数组。

    像这样修改你的代码:

    def multilayer_perceptron(x):
        #x = np.array([[[x]]],  dtype='float32') #comment
        layer_1 = tf.add(tf.matmul([[[x]]], weights['h1']), biases['b1']) #change x shape by adding []
        layer_1 = tf.nn.tanh(layer_1)
        layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
        layer_2 = tf.nn.tanh(layer_2)
        output = tf.matmul(layer_2, weights['out']) + biases['out']
        return output
    

    【讨论】:

      【解决方案2】:

      为了让一些 tensorflow 操作运行良好,最好所有操作的元素都是 tf.tensor 类型,你必须使用重塑形状

      def multilayer_perceptron(x):
       x =  tf.reshape(x , (1,1,1))
      

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        • 2019-08-13
        • 2019-01-27
        • 1970-01-01
        • 2014-01-18
        • 2017-12-08
        相关资源
        最近更新 更多