无法在简单CNN中将符号Keras输入/输出转换为numpy数组



这是一个我无法回避的非常简单的问题。我是tensorflow的新手,这是我第二次面对这个问题。

from tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten, Input
from tensorflow.keras.models import Model
import numpy as np

x = tf.keras.Input(shape=(128, 128, 4))
conv = Conv2D(30, (3, 3), activation='relu',input_shape=(128, 128, 4))(x)
conv = Conv2D(12, (5,5))(conv)
conv = MaxPooling2D(pool_size=(2,2))(conv)
print(conv[2])
conv = np.array(conv[2]) # <---- here is the problem
input_mean = np.mean(conv[1:], axis=0)
input_std = np.std(conv, axis=0)
conv = (conv - input_mean) / input_std
conv = Flatten()(conv)
conv = Dense(157, activation='relu')(conv)
model = Model(inputs = x, outputs = conv)
#model.summary()

我得到的错误是,

Cannot convert a symbolic Keras input/output to a numpy array. This error may indicate that you're trying to pass a symbolic value to a NumPy call, which is not supported. Or, you may be trying to pass Keras symbolic inputs/outputs to a TF API that does not register dispatching, preventing Keras from automatically converting the API call to a lambda layer in the Functional Model.

我的问题是,如何从Maxpooling层中获取Output,并获取每个传入通道的平均值和标准差?平均值和std的输出将是一个张量,其中每个通道都被单独归一化。然后,我会将这个输出压平,并将其发送到我的完全连接的致密层。

提前谢谢。

我得到了类似的错误,并执行了以下操作:

del model

之前:

model = Model(inputs = x, outputs = conv)

它解决了我的问题。我很想知道它是否也能解决你的问题:(。

最新更新