Я пытаюсь изменить размер единицы для последнего слоя в соответствии с набором данных. Это абстракция моего кода, но она не работает.
class cnn_model:
num_classes = 1
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Dense(num_classes, activation='softmax'))
@staticmethod
def train_two():
cnn_mod = cnn_model
cnn_mod.num_classes = 2
model = cnn_mod.model
@staticmethod
def train_three():
cnn_mod = cnn_model
cnn_mod.num_classes = 3
model = cnn_mod.model
Просто передайте количество классов в качестве аргумента при создании экземпляра нового класса CNNModel
:
import tensorflow as tf
from tensorflow.keras import layers
class CNNModel:
def __init__(self, num_classes=2):
self.num_classes = num_classes
self.model = tf.keras.models.Sequential()
self.model.add(layers.Conv2D(128, (3, 3), activation='relu'))
self.model.add(layers.MaxPooling2D((2, 2)))
self.model.add(layers.Conv2D(256, (3, 3), activation='relu'))
self.model.add(layers.MaxPooling2D((2, 2)))
self.model.add(layers.Dense(self.num_classes, activation='softmax'))
cnnmodel = CNNModel(num_classes=3)
kerasmodel = cnnmodel.model
print(cnnmodel.num_classes) # 3
Я бы также посоветовал вам прочитать Соглашения об именах и Отступ в PEP8.