类型错误:minimize()缺少一个必需的位置参数:'var_list'。

5

我正在尝试使用SGD来最小化损失,但是在使用SGD时出现了错误。我正在尝试在tensorflow 2.0中完成此操作,导致问题的一个额外参数是var_list。

import tensorflow as tf
import numpy
import matplotlib.pyplot as plt
rng = numpy.random
print(rng)

# Parameters
learning_rate = 0.01
training_epochs = 1000
display_step = 50

# Training Data
train_X = numpy.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,
                         7.042,10.791,5.313,7.997,5.654,9.27,3.1])
train_Y = numpy.asarray([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,
                         2.827,3.465,1.65,2.904,2.42,2.94,1.3])
n_samples = train_X.shape
print(n_samples)

X = tf.Variable(train_X, name = 'X' ,dtype = 'float32')
Y = tf.Variable(train_Y, name = 'Y' ,dtype = 'float32')
print(X)

# Set model weights
W = tf.Variable(rng.randn(), name="weight")
b = tf.Variable(rng.randn(), name="bias")
print(W)
print(b)

# Construct a linear model
pred = tf.add(tf.multiply(X, W), b)


# Mean squared error. reduce_sum just calculates the sum of the parameters given.
cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)
# Gradient descent
# Note, minimize() knows to modify W and b because Variable objects are trainable=True by default
#optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
optimizer = tf.optimizers.SGD(name='SGD').minimize(cost)
#optimizer = tf.SGD(learning_rate).minimize(cost)
# Initialize the variables (i.e. assign their default value)
init = tf.global_variables_initializer()

我也遇到了同样的问题。如果有解决方案,请告诉我好吗? - The Cosmological Cafe
同样的问题;我认为:: 在v1中,var_list的默认值为None,但在v2中,它没有默认值,因此需要定义。所以尝试添加.minimize(cost, var_list=None) - user20650
2个回答

4

就像PankajKabra所回答的那样,你缺少了.minimize()函数的var_list参数。正如他指出的那样,你应该提供想要最小化的变量W和b。你的代码现在应该是这样的:

optimizer = tf.optimizers.SGD(name='SGD').minimize(cost,var_list=[W,b])

但是另一个问题是,由于某种原因,您的成本定义应该被制成一个函数,以便它可以被调用。您可以使用lambda快速完成此操作,因此您应该将您的成本替换为

cost = lambda: tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)

看看这是否有帮助


0

.minimize()方法中,您缺少var_list参数。在这里,您提供要最小化的变量列表,在您的情况下,它将是.minimize(cost, var_list = [W, b])


1
我也尝试了,但还是出现了一些错误。看起来是与tensorflow 2.0有关的问题。 - Akshay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接