AttributeError: 'CNNMnist' object has no attribute 'compile'啥问题呢


from tensorflow.python.keras.datasets import cifar100
from tensorflow.python.keras import layers,losses,optimizers
from tensorflow.python.keras.models import Sequential
import tensorflow as tf
class CNNMnist(object):
        model=Sequential([
        layers.Conv2D(32,kernel_size=5,strides=1,padding='same',data_format='channels_last',activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
        layers.Conv2D(64,kernel_size=5,strides=1,padding='same',data_format='channels_last',activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
        layers.Flatten(),
        layers.Dense(1024,activation=tf.nn.relu),
        layers.Dense(100,activation=tf.nn.softmax)
])
def __init__(self):
        # 读取数据集
        (self.train,self.train_label),(self.test,self.test_label) = cifar100.load_data()
        # 对数据集进行归一化处理
        self.train = self.train.reshape(-1,32,32,3) / 255.0
        self.test = self.test.reshape(-1,32,32,3) / 255.0

def compile(self):
      def compile(self):
        CNNMnist.model.compile(optimizer=optimizers.adam_v2.Adam(),
                               loss=losses.sparse_categorical_crossentropy,
                               metrics=['accuracy'])

        return None
      
def fit(self):
      CNNMnist.model.fit(self.train,self.train_label,epochs=1,batch_size=32)
      return None
 
if __name__ == '__main__':
    cnn = CNNMnist()
    
    cnn.compile()
    
    cnn.fit()

AttributeError: 'CNNMnist' object has no attribute 'compile'

python 是很注意格式的语言
你检查下compile的定义就知道错误了

你对比看看


from tensorflow.python.keras.datasets import cifar100
from tensorflow.python.keras import layers,losses,optimizers
from tensorflow.python.keras.models import Sequential
import tensorflow as tf
class CNNMnist(object):
        model=Sequential([
        layers.Conv2D(32,kernel_size=5,strides=1,padding='same',data_format='channels_last',activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
        layers.Conv2D(64,kernel_size=5,strides=1,padding='same',data_format='channels_last',activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=2,strides=2,padding='same'),
        layers.Flatten(),
        layers.Dense(1024,activation=tf.nn.relu),
        layers.Dense(100,activation=tf.nn.softmax)
])
    def __init__(self):
        # 读取数据集
        (self.train,self.train_label),(self.test,self.test_label) = cifar100.load_data()
        # 对数据集进行归一化处理
        self.train = self.train.reshape(-1,32,32,3) / 255.0
        self.test = self.test.reshape(-1,32,32,3) / 255.0
    def compile(self):
        CNNMnist.model.compile(optimizer=optimizers.adam_v2.Adam(),
                               loss=losses.sparse_categorical_crossentropy,
                               metrics=['accuracy'])
        return None
    def fit(self):
        CNNMnist.model.fit(self.train,self.train_label,epochs=1,batch_size=32)
        return None
if __name__ == '__main__':
    cnn = CNNMnist()
    cnn.compile()
    cnn.fit()

AttributeError: 'CNNMnist' object has no attribute 'compile'
AttributeError:“CNNMnist”对象没有属性“compile”
属性异常:当你访问一个对象的属性,但是这个属性没有被这个对象定义时,就会报错这个
目前建议是去掉【 def compile(self):】这句,其他地方的修改根据下面这段代码去修改。
参考他人写的代码优化下:

 def compile(self):
 
        CNNMnist.model.compile(optimizer=keras.optimizers.Adam(),
                               loss=tf.keras.losses.sparse_categorical_crossentropy,
                               metrics=['accuracy'])
        return None
 
    def fit(self):
 
        CNNMnist.model.fit(self.train, self.train_label, epochs=1, batch_size=32)
 
        return None
 
    def evaluate(self):
 
        test_loss, test_acc = CNNMnist.model.evaluate(self.test, self.test_label)
 
        print(test_loss, test_acc)
        return None
 
 
if __name__ == '__main__':
 
    cnn = CNNMnist()
 
    cnn.compile()
 
    cnn.fit()
 
    cnn.predict()
 
    print(CNNMnist.model.summary())