一个关于 TensorFlow 的悲剧故事
Java技术迷
共 3525字,需浏览 8分钟
·
2021-10-20 19:31
点击关注公众号,Java干货及时送达
点击上方 Java技术迷,选择 设为星标
作者 | Zahar Chikishev
译者 | 弯月
出品 | CSDN(ID:CSDNnews)
安装
Eagerexecution 就是一个骗局
tf.data.DataSetAPI 更是一团糟
API重复
1、tf.nn.conv2d
2、tf.keras.layers.Conv2D
3、tf.compat.v1.layers.Conv2D
4、tf.compat.v1.layers.conv2d
5、tf.layers.Conv2D
6、tf.raw_ops.Conv2D
7、tf.contrib.slim.conv2d
开发的各种不严谨
ImageDataGenerator是 TensorFlow 的增强库,与所有现代库一样,不允许局部生成随机种子。相反,它使用全局 numpy.random.seed()。使用全局种子会导致可复现实验的开发变得异常复杂,尤其是在多线程的情况下。 Sequence 数据 API 方法 on_epoch_end() 没有使用 epoch 作为参数。在几个版本中,它甚至没有被调用,因此相比之下,缺少的参数似乎只是一个小问题。通过这个例子,我们也可以看出 TensorFlow 的测试覆盖率(远低于应有水平)。 TF 中的 GPU 内存管理很糟糕。首先,无论实际模型大小如何,默认情况下都会在模型初始化时占用所有内存。幸运的是,有一个配置选项允许分配的内存按需递增。但接下来还有一个大问题:分配的 GPU 内存在使用后无法释放,释放内存的唯一方法是杀死进程。 TF 训练日志总是包含几个模糊的警告消息。根据版本不同,警告也会不同。我个人不喜欢日志中出现警告消息,我会想办法解决掉。但我无法解决掉 TF 训练日志中的警告,因为通常是一个 TF 函数抱怨另一个 TF 函数。这些函数真的应该选择其他的交流方式。
结论
版本
评论