使用tensorflow时__enter__出现AttributeError问题

时间:2019-12-13 07:16:10

标签: tensorflow

import tensorflow as tf
import numpy as np
tf.enable_eager_execution()

x_data = [[1,2,1,1],[2,1,3,2],[3,1,3,4],[4,1,5,5],[1,7,5,5],[1,2,5,6],[1,6,6,6],[1,7,7,7]]
y_data = [[0,0,1],[0,0,1],[0,0,1],[0,1,0],[0,1,0],[0,1,0],[1,0,0],[1,0,0]]

x_data = np.asarray(x_data, dtype=np.float32)
y_data = np.asarray(y_data, dtype=np.float32)
nb_classes = 3

W = tf.Variable(tf.random_normal([4, nb_classes]), name = 'weight')
b = tf.Variable(tf.random_normal([nb_classes]), name = 'bias')
variables = [W,b]

def hypothesis(X):
    hypo = tf.nn.softmax(tf.matmul(X,W) + b)
    return hypo 

def cost_fn(X,Y):
    logits = hypothesis(X)
    cost = -tf.reduce_sum(Y * tf.log(logits), axis = 1)
    cost_mean = tf.reduce_mean(cost)
    return cost_mean

def grad_fn(X,Y):
    with tf.GradientTape as tape:
        cost =  cost_fn(X,Y)
        grads = tape.gradient(cost, variables)
        return grads

所以我正在尝试分类,并且正在为梯度下降优化器创建一个梯度函数。 并且错误发生在代码的最后部分

with tf.GradientTape as tape:

AttributeError:输入发生了,我不明白为什么。我可以得到错误原因或解决方法吗?

1 个答案:

答案 0 :(得分:1)

您在GradientTape中缺少括号。应该是这样。

def grad_fn(X,Y):
    with tf.GradientTape() as tape:
        cost =  cost_fn(X,Y)
        grads = tape.gradient(cost, variables)
        return grads