python - 在这个例子中如何打印张量流张量值?
问题描述
我是 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()
先放。我只添加这一行并且代码有效。
推荐阅读
- android - 在 Android 上上传 crashlytics 映射的 URL
- eclipse - 具有多种功能的 Eclipse 插件安装
- http - cURL 到 Axios POST 请求 (Twilio) ERR 状态代码 415
- python - 使用 Selenium WebDriver for Chrome 进行简单获取请求后内存膨胀
- python-3.x - 无法`brew postinstall python3`
- deep-learning - 测试yolov3模型时出现cuda错误>> CUDA状态错误:文件:./src/dark_cuda.c : ()
- javascript - 为什么 try catch 块不能捕获 promise 异常?
- python - 查找数据框中列值更改的行
- proxy - 使用 mitmproxy 看不到 WhatsApp 流量
- javascript - 非必需输入后的必需输入