簡體   English   中英

在此示例中,如何打印tensorflow張量值?

[英]How to print tensorflow tensor value in this example?

我是tensorflow的新手,基本上我將示例復制到了某個地方但無法編譯它。

import  tensorflow as tf
from    tensorflow.keras import datasets, layers, optimizers, Sequential, metrics

(xs, ys),_ = datasets.mnist.load_data()
print('datasets:', xs.shape, ys.shape, xs.min(), xs.max())

xs = tf.convert_to_tensor(xs, dtype=tf.float32) / 255.
db = tf.data.Dataset.from_tensor_slices((xs,ys))
db = db.batch(32).repeat(10)

network = Sequential([layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(10)])
network.build(input_shape=(None, 28*28))
network.summary()

optimizer = optimizers.SGD(lr=0.01)
acc_meter = metrics.Accuracy()

for step, (x,y) in enumerate(db):

    with tf.GradientTape() as tape:
        x = tf.reshape(x, (-1, 28*28))
        out = network(x)

        y_onehot = tf.one_hot(y, depth=10)
        loss = tf.square(out-y_onehot)
        loss = tf.reduce_sum(loss) / 32
        acc_meter.update_state(tf.argmax(out, axis=1), y)
        grads = tape.gradient(loss, network.trainable_variables)
        optimizer.apply_gradients(zip(grads, network.trainable_variables))

        if step % 200==0:
            print(float(loss))
            exit()

這給出了錯誤:

TypeError: float() argument must be a string or a number, not 'Tensor'

在倒數第二行。

但是,我嘗試過loss.eval() ,它說No default session is registered. 但是如果我寫

tf.Session() as sess:
    print(sess.run(loss))

這會導致一些非常復雜的錯誤。 如果我寫print(loss.numpy()) ,它說AttributeError: 'Tensor' object has no attribute 'numpy'

我在互聯網上搜索的所有解決方案都要求代碼運行tf.Session() ,在此示例中沒有。 如何打印loss變量的值?

如果您使用的是tf-1.x,則應首先放置tf.enable_eager_execution() 我只添加此行,代碼即可正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM