【问题标题】:Why keras does not allow to add a convolutional layer in this way?为什么keras不允许以这种方式添加卷积层?
【发布时间】:2019-05-18 05:04:28
【问题描述】:

以下代码

from tensorflow import keras
from keras.layers import Conv2D

model = keras.Sequential()
model.add(Conv2D(1, (3, 3), padding='same', input_shape=(28, 28, 1)))

执行时抛出错误:

TypeError: The added layer must be an instance of class Layer. Found: <keras.layers.convolutional.Conv2D object at 0x7fea0c002d10>

我也尝试使用 Convolutional2D,但遇到了同样的错误。为什么?

【问题讨论】:

  • 干脆不要把 tf.keras 和 keras 混在一起,它们是不兼容的。

标签: python tensorflow keras conv-neural-network


【解决方案1】:

试试这个:

from tensorflow import keras
from tensorflow.keras.layers import Conv2D

model = keras.Sequential()
model.add(Conv2D(1, (3, 3), padding='same', input_shape=(28, 28, 1)))

您正在将 tf.keras Sequential 模型与 keras Conv2D 层(而不是 tf.keras Conv2D 层)混合。

或者,如下所述,使用实际的 Keras:

import keras
from keras.models import Sequential
from keras.layers import Conv2D

model = Sequential()
model.add(Conv2D(1, (3, 3), padding='same', input_shape=(28, 28, 1)))

【讨论】:

  • 最好不要使用 tensorflow 中的 keras,因为安装了实际的 keras。只需 import keras 而不是 from tensorflow
  • 我读到“Keras 是一个模型级库,不处理低级操作,这是张量操作库或后端的工作”。所以如果我们像你说的那样使用实际的 Keras,那么这些低级操作是谁做的。如果 keras 本身可以做到这一点,那么 Tensorflow 的额外添加/使用是什么。谢谢。
  • Keras 将使用一个后端,对大多数人来说是 TensorFlow,但也可以是另一个库。这只是在您使用的 API 实现中保持一致的问题:您可以使用 Keras 实现(并选择您的后端,可以是 TF),或者您使用 tf.keras 实现来构建您的模型。您不能在一个脚本中混合使用两者。
【解决方案2】:

你应该从 keras 模型中导入 Sequential

from keras.models import Sequential
from keras.layers import Conv2D

model = Sequential()
model.add(Conv2D(1, (3, 3), padding='same', input_shape=(28, 28, 1)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 2021-11-09
    • 2023-03-08
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多