Tensorflow:获得预测

彼得罗夫

我尝试获得预测和学习网络。

这是我的网络参数

X = tf.placeholder(tf.float32, shape=(None, X_train.shape[1]), name="input")
y = tf.placeholder(tf.float32, shape=(None, y_train.shape[1]), name="y")
y_cls = tf.argmax(y, axis=1)

weights = tf.Variable(tf.truncated_normal([X_train.shape[1], y_train.shape[1]], stddev=0.05), name="weights", trainable=True)
bias = tf.constant(1.0, shape=[y_train.shape[1]], name="bias")

layer = tf.nn.relu_layer(X, weights, bias, name="relu_layer")
layer_1 = tf.nn.relu(layer)
outs = tf.nn.relu(layer_1, name="outs")
y_pred = tf.argmax(outs, axis=1)

cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(logits=layer_1, labels=y)
cost = tf.reduce_mean(cross_entropy)
acc = tf.cast(tf.equal(y_pred, y_cls), tf.float16)
predicted = tf.reduce_sum(acc)

learning_rate = 1e-3
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(cost)

并尝试获得预测

n_epochs = 100
batch_size = 500
n_batches = int(np.ceil(1000 / batch_size))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    optimize(sess, training_op, X_train, X_test, y_train, y_test, epoch=20)
    print(sess.run(y_pred, feed_dict={X: X_test}))

但它返回一个错误

ValueError: setting an array element with a sequence.

我也试着改用y_predoutslayer_1,但它也返回此错误。

我怎样才能解决这个问题并获得预测值?

梅林1896

您的代码存在多个问题,我认为您在此处发布的错误是最不重要的错误之一。

让我们来看看你的代码,让我评论一些事情。我希望这比仅仅修复单个ValueError.

您从定义两个占位符变量开始Xy然后定义一个新的张量y_cls作为argmaxof y由此我怀疑这y是单热编码的地面实况类向量的集合(批处理的第一轴)。

然后你继续定义权重和偏差。对于权重,您选择tf.Variable而对于您使用的偏差tf.constant我不认为这是故意的,您实际上希望偏差是不可训练的。所以请注意:如果您使用tf.constant,您将创建一个将来无法更改的常量值。因此,在训练期间不会更新偏差张量。请阅读 tensorflow 中的变量和常量。这个问题可能是一个开始:TensorFlow Variables and Constants

现在定义第一层:

layer = tf.nn.relu_layer(X, weights, bias, name="relu_layer")

此处发生的情况如下:对于批次中的每个x长度向量都会计算X_train.shape[1]该值u=x*W+b,并将此结果传递给relu函数,该函数基本上将所有值 <0 设置为零,而其他所有内容保持原样。所以你的输出是z=max(0,x*W+b)在元素上取最大值的地方。输出z具有 shape (y_train.shape[1],)layer您定义张量的输出tf.nn.relu_layer具有形状(None, y_train.shape[1])以说明批量大小。

然后你定义“有趣”的东西:

layer_1 = tf.nn.relu(layer)
outs = tf.nn.relu(layer_1, name="outs")

换种说法,你计算layer_1 = max(0,layer) = max(0,max(0,x*W+b)). 因为 relu 函数是幂等的,所以这根本没有影响(除了创建更大的计算图)。所以 中的所有数字layer_1都与 中的相同layer然后,您再次使用outs. Sooutslayer_1and相同layer

然后你继续添加另一个激活函数:softmax。这个函数的应用有点隐蔽,因为它与cross_entropy计算同时发生至少可以说,以这种方式结合 relu 激活(或三个)和 softmax 是“非常规的”。有趣的是,您使用layer_1作为logits参数而不是layeror outs

当您计算准确度时,您将输出转换tf.equal(y_pred, y_cls)为 float16。为什么是 float16?tf.equal返回一个 bool 类型并使用此掩码进行计算,您肯定必须对其进行转换。但是如果你只想要总和,那么转换为 anint似乎更合理。但是,我怀疑您并不真正想要将总和作为您的“准确度”,而是将真阳性率与呈现样本总数的比率。看看tf.metrics.accuracy!

在第二个代码片段中,您调用了一些optimize我们不知道其源代码的函数。

optimize(sess, training_op, X_train, X_test, y_train, y_test, epoch=20)

我希望您使用作为训练数据和地面实况标签运行您的training_opfor n_epochs(但您将 epoch=20 传递给此函数)为什么你还通过训练方法,我不真正理解,因为通常你想在两个不同的步骤中保持训练和测试。X_trainy_trainX_testy_test

最后你打电话sess.run(y_pred, feed_dict={inp: X_test})在 feed_dict 中,您为占位符分配inp的值X_test但是,您inp之前未定义占位符,因此无法运行此代码。我假设您想X_test用作网络的输入,因此将其用作X您在开始时定义的占位符的值

我强烈建议你阅读更多关于神经网络以及如何构建它们并阅读一些 tensorflow 教程。

然后修改您的整个代码,并在遇到麻烦时随时提出新问题。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TensorFlow 获得单个预测的准确性

来自分类Dev

如何获得预测概率?

来自分类Dev

如何在 Tensorflow Object Detection API 中获得预测值的百分比?

来自分类Dev

Tensorflow收敛但预测错误

来自分类Dev

熊猫获得假人逆转预测

来自分类Dev

如何获得simpleRNN的多重预测

来自分类常见问题

使用TensorFlow模型进行预测

来自分类Dev

Tensorflow预测总是相同的结果

来自分类Dev

TensorFlow LSTM预测相同的值

来自分类Dev

Tensorflow和Keras预测阈值

来自分类Dev

Tensorflow DNNClassifier返回错误的预测

来自分类Dev

Tensorflow,预测值的概率(ROI)

来自分类Dev

使用 TensorFlow 预测新数据

来自分类Dev

如何获得预测的班级而不是班级概率?

来自分类Dev

如何获得R中的预测精度?

来自分类Dev

如何获得xgboost预测的类别标签?

来自分类Dev

如何仅获得概率大于x的预测

来自分类Dev

如何获得模型预测的最后索引?

来自分类Dev

如何获得分类模型的预测概率?

来自分类Dev

如何在pyspark中获得模型的预测

来自分类Dev

使用线性回归获得预测值

来自分类Dev

如何以用户输入的值获得预测?

来自分类Dev

如何获得多标签预测的正确精度?

来自分类Dev

Keras / Tensorflow预测:数组形状错误

来自分类Dev

使用Tensorflow做出预测遗失参数

来自分类Dev

Tensorflow 2图像批量预测返回结果

来自分类Dev

使用TensorFlow MNIST进行专家预测

来自分类Dev

无法在 Java API 中运行 Tensorflow 预测

来自分类Dev

使用 Tensorflow/tflearn 预测金融数据的层