keras.backend和keras.layers如何选择?
How to choose between keras.backend and keras.layers?
我发现keras.backend
或keras.layers
中有很多相同的名字,例如keras.backend.concatenate
和keras.layers.Concatenate
。我隐约知道一个是tensor,一个是layer。但是当代码那么大的时候,那么多的函数让我搞不清哪个是tensor哪个是layer。有人有解决这个问题的好主意吗?
我发现的一种方法是先在一个函数中定义所有占位符,但是函数将其作为变量可能在最后return层,而另一个函数将这一层作为变量可能return 另一个变量。
如果有一个层可以实现您想要做的事情,您绝对应该使用 keras.layers
。这是因为,在构建模型时,Keras 层仅接受 Keras Tensors(即层的输出)作为输入。但是,keras.backend.*
中方法的输出不是Keras Tensor(它是后端Tensor,例如TensorFlow Tensor
),因此您不能将它们直接传递给层。
虽然,如果有一个图层无法完成的操作,那么您可以在 Lambda
图层中使用 keras.backned.*
方法来执行该自定义 operation/computation。
注:Keras Tensor其实和后端Tensor是同一类型的(例如tf.Tensor
);但是,它增加了一些 Keras 在构建模型时需要的 Keras 特定属性。
我发现keras.backend
或keras.layers
中有很多相同的名字,例如keras.backend.concatenate
和keras.layers.Concatenate
。我隐约知道一个是tensor,一个是layer。但是当代码那么大的时候,那么多的函数让我搞不清哪个是tensor哪个是layer。有人有解决这个问题的好主意吗?
我发现的一种方法是先在一个函数中定义所有占位符,但是函数将其作为变量可能在最后return层,而另一个函数将这一层作为变量可能return 另一个变量。
如果有一个层可以实现您想要做的事情,您绝对应该使用 keras.layers
。这是因为,在构建模型时,Keras 层仅接受 Keras Tensors(即层的输出)作为输入。但是,keras.backend.*
中方法的输出不是Keras Tensor(它是后端Tensor,例如TensorFlow Tensor
),因此您不能将它们直接传递给层。
虽然,如果有一个图层无法完成的操作,那么您可以在 Lambda
图层中使用 keras.backned.*
方法来执行该自定义 operation/computation。
注:Keras Tensor其实和后端Tensor是同一类型的(例如tf.Tensor
);但是,它增加了一些 Keras 在构建模型时需要的 Keras 特定属性。