vielen Dank für die Rückmeldung.
Wie resettet man den Kernel? Ich arbeite mit google colab. Dabei habe ich den code nochmal von vorne laufen lassen. Auch dann erhalte ich folgende Fehlermeldung:
ValueError: Input 0 of layer "conv2d_1" is incompatible with the layer: expected axis -1 of input shape to have value 64, but received input with shape (None, 14, 14, 128)
Daher befürchte ich, dass Ihre annahme mit dem resetten des Kernels nicht zur Problemlösung beiträgt
Mein vollständiger Code:
Mit dem folgenden Code (code1) habe ich eine Klasse für einen CNN block erstellt. diesen Block habe ich dann im unteren model (code2) verwendet.
code1:
Code: Alles auswählen
# Custom Convolutional Layer Block wird erstellt
class CNNBlock(keras.layers.Layer): # subclassing Layer to define inner computation blocks and Model to define the outer model
def __init__(self, filters, kernel_size = 3, activation = "relu", padding = "same", pool_size =2, cnn_anzahl=1, **kwargs):
super().__init__(**kwargs)
# da schon normaliziert wurde, wird kein BN layer von mir verwendet
self.cnnlayer = keras.layers.Conv2D(filters = filters, kernel_size = kernel_size, padding= padding)
self.activationlayer = keras.layers.Activation(keras.activations.get(activation))
self.poolinglayer = keras.layers.MaxPooling2D(pool_size)
self.cnn_anzahl = cnn_anzahl
def call(self, input_tensor):
Z = input_tensor
for i in range(self.cnn_anzahl):
Z = self.cnnlayer(Z)
Z = self.activationlayer(Z)
Z = self.poolinglayer(Z)
code2:
Code: Alles auswählen
# Model mit dem Custom model Block
model = keras.models.Sequential([
# einzelnes convolutional layer zu Beginn
keras.layers.Conv2D(filters = 64, kernel_size =7 ,activation='relu', padding="SAME",
input_shape = [28,28,1]),
MaxPooling2D(pool_size = 2),
# 2 Custom Layer Blöcke
CNNBlock(filters = 128, cnn_anzahl=2),
CNNBlock(filters = 256, cnn_anzahl=2),
# dense layer on top of the convolutional layer
Flatten(),
Dense(units = 128, activation = "relu"),
Dropout(0.5), # bei CNN sollte man Dropout = 0.5 oder 0.4 verwenden
Dense(units = 64, activation = "relu"),
Dropout(0.5),
Dense(units = 10, activation = "softmax"),
])
model.compile(loss = "sparse_categorical_crossentropy", optimizer = "nadam", metrics = ["accuracy"])
model.fit(X_train, y_train, epochs = 10, validation_data = (X_valid, y_valid))