keras.backend和keras.layers如何选择?

How to choose between keras.backend and keras.layers?

我发现keras.backendkeras.layers中有很多相同的名字,例如keras.backend.concatenatekeras.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 特定属性。