tensorflow - 将神经网络输出限制在 0 和 1 之间的简单方法?
问题描述
所以我正在编写一个 GAN 神经网络,如果它小于 0,我想将网络的输出设置为 0,如果它大于 1,则设置为 1,否则保持不变。我对 tensorflow 很陌生,但我不知道有任何 tensorflow 功能或激活来做到这一点而不会产生不必要的副作用。所以我做了我的损失函数,所以它计算损失,就好像输出被钳位一样,使用以下代码:
def discriminator_loss(real_output, fake_output):
real_output_clipped = min(max(real_output.numpy()[0],
0), 1)
fake_output_clipped = min(max(fake_output.numpy()[0],
0), 1)
real_clipped_tensor =
tf.Variable([[real_output_clipped]], dtype = "float32")
fake_clipped_tensor =
tf.Variable([[fake_output_clipped]], dtype = "float32")
real_loss = cross_entropy(tf.ones_like(real_output),
real_clipped_tensor)
fake_loss = cross_entropy(tf.zeros_like(fake_output),
fake_clipped_tensor)
total_loss = real_loss + fake_loss
return total_loss
但我收到此错误:
ValueError: No gradients provided for any variable: ['dense_50/kernel:0', 'dense_50/bias:0', 'dense_51/kernel:0', 'dense_51/bias:0', 'dense_52/kernel:0', 'dense_52/bias:0', 'dense_53/kernel:0', 'dense_53/bias:0'].
有谁知道这样做的更好方法或解决此错误的方法?
谢谢!
解决方案
您可以将ReLU
Keras 中的图层应用为最终图层并设置max_value=1.0
. 例如:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(32, input_shape=(16,)))
model.add(tf.keras.layers.Dense(32))
model.add(tf.keras.layers.ReLU(max_value=1.0))
您可以在此处阅读更多相关信息:https ://www.tensorflow.org/api_docs/python/tf/keras/layers/ReLU
推荐阅读
- open-source - 需要对我的应用程序中的所有 Exes 进行代码签名,少数开源 Exes 怎么样
- python - 在列表 drf 中获取类别 id 的所有子项
- react-native - 如何从 react-native-modal-dropdown 渲染许多 ModalDropdown 而不会崩溃
- docker - 环境变量未在 dockerfile 中提取
- java - 如何在活动启动时在recyclerview中显示已选中的复选框(多对多关系)
- javascript - 在 JavaScript/TypeScript 中解构时保留变量名
- node.js - Mongoose 连接 Promise 回调
- c# - 以 JSON 格式返回 API
- reactjs - 如何在 React Router v6 中为 Route 创建 customRouteWrapper?
- lua - 偏移 CFrame 数学