gpt4 book ai didi

python - 在 TensorFlow 中,如何将 2 个参数输入 session.run()

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:21 25 4
gpt4 key购买 nike

我正在尝试进入 TensorFlow,并尝试对初学者示例进行一些更改。

我正在尝试合并 Implementing a Neural Network from Scratch Deep MNIST for Experts

我使用 X, y = sklearn.datasets.make_moons(50, noise=0.20) 获取数据。基本上,这一行给出了 2D X (,) 和 2 类 Y (0/1)

x = tf.placeholder(tf.float32, shape=[50,2])
y_ = tf.placeholder(tf.float32, shape=[50,2])

网络结构与Deep MNIST for Experts相同。区别在于 session 运行功能。

sess.run(train_step, feed_dict={x:X, y_:y})

但这给出了一个

_ValueError: setting an array element with a sequence._

谁能给我一些关于这个问题的提示?这是代码。

import numpy as np
import matplotlib
import tensorflow as tf
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets
import sklearn.linear_model
sess = tf.InteractiveSession()
matplotlib.rcParams['figure.figsize'] = (10.0, 8.0)
np.random.seed(0)
X, y = sklearn.datasets.make_moons(50, noise=0.20)
plt.scatter(X[:,0], X[:,1], s=40, c=y, cmap=plt.cm.Spectral)
clf = sklearn.linear_model.LogisticRegressionCV()
clf.fit(X, y)
batch_xs = np.vstack([np.expand_dims(k,0) for k in X])
x = tf.placeholder(tf.float32, shape=[50,2])
y_ = tf.placeholder(tf.float32, shape=[50,2])
W = tf.Variable(tf.zeros([2,2]))
b = tf.Variable(tf.zeros([2]))
a = np.arange(100).reshape((50, 2))
y = tf.nn.softmax(tf.matmul(x,W) + b)
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
sess.run(tf.initialize_all_variables())
for i in range(20000):
sess.run(train_step, feed_dict={x:X, y_:y})

这是在与 TensorFlow 斗争之后的正确代码:

# Package imports
import numpy as np
import matplotlib
import tensorflow as tf
import matplotlib.pyplot as plt
import sklearn
import sklearn.datasets
import sklearn.linear_model

rng = np.random

input_dim = 2
output_dim = 2
hidden_dim = 3

np.random.seed(0)
Train_X, Train_Y = sklearn.datasets.make_moons(200, noise=0.20)
Train_X = np.reshape(Train_X, (-1,2))
Train_YY = []
for i in Train_Y: #making Train_Y a 2-D list
if i == 1:
Train_YY.append([1,0])
else:
Train_YY.append([0,1])
print Train_YY
X = tf.placeholder("float",shape=[None,input_dim])
Y = tf.placeholder("float")
W1 = tf.Variable(tf.random_normal([input_dim, hidden_dim], stddev=0.35),
name="weights")
b1 = tf.Variable(tf.zeros([1,hidden_dim]), name="bias1")
a1 = tf.tanh(tf.add(tf.matmul(X,W1),b1))
W2 = tf.Variable(tf.random_normal([hidden_dim,output_dim]), name="weight2")
b2 = tf.Variable(tf.zeros([1,output_dim]), name="bias2")
a2 = tf.add(tf.matmul(a1, W2), b2)
output=tf.nn.softmax(a2)
correct_prediction = tf.equal(tf.argmax(output,1), tf.argmax(Y,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
cross_entropy = -tf.reduce_sum(Y*tf.log(output))
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
for i in range(20000):
# for (a,d) in zip(Train_X, Train_Y):
training_cost = sess.run(optimizer, feed_dict={X:Train_X, Y:Train_YY})
if i%1000 == 0:
# print "Training cost=", training_cost, "W1=", W1.eval(), "b1=", b1.eval(),"W2=", W2.eval(), "b2=", b2.eval()
# print output.eval({X:Train_X, Y:Train_YY})
# print cross_entropy.eval({X:Train_X, Y:Train_YY})
print "Accuracy = ", accuracy.eval({X:Train_X, Y:Train_YY})

最佳答案

问题的出现是因为你在下面一行重新定义了y:

y = tf.nn.softmax(tf.matmul(x,W) + b)

TensorFlow 然后给出一个错误,因为在 feed_dict 中输入 y_: y 会用另一个张量输入一个张量,这是不可能的(而且——即使它是——这个特定的提要会产生循环依赖!)。

解决方案是重写您的 softmax 和交叉熵操作:

y_softmax = tf.nn.softmax(tf.matmul(x,W) + b)
cross_entropy = -tf.reduce_sum(y_*tf.log(y_softmax))

关于python - 在 TensorFlow 中,如何将 2 个参数输入 session.run(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35495851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com