由于 CNN 中的 tensorflow 版本支持导致 Keras 属性错误

Keras attribute error due to tensorflow version support in CNN

我正在研究卷积神经网络,但遇到错误

AttributeError: module 'keras.utils.generic_utils' has no attribute 'populate_dict_with_module_objects

这里是不包括对数据集的数据处理的代码。 我的 Keras 版本是 2.4.3,TensorFlow 是 2.5.0,python 是 3.8

我见过许多其他人面临类似问题,但我认为这与 TensorFlow 的兼容版本有关。我已经尝试了 3-4 个版本的 TensorFlow,但它们都给我带来了像上面这样的模糊错误。

我希望这个问题可以解决,否则我不知道我将如何继续使用网络

import pickle 
import time 
import os 
import cv2
import random 
import matplotlib.pyplot as plt 
import numpy as np 
from keras.models import Sequential 
from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Activation
model = Sequential()

model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D(2,2))

model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D(2,2))

model.add(Flatten())

model.add(Dense(128, input_shape = X.shape[1:]), activation = 'relu')
model.add(Dense(4,activation = 'softmax'))

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics = ['accuracy'])
model.fit(X,Y, epochs =2, validation_split = 0.2)

如果您在同一导入中使用 2.x, you should not mix standalone and new 。您上面的代码应该按如下方式导入:(在 colab 中测试版本 2.4、2.5)。

import pickle, time, os ,cv2, random 
import matplotlib.pyplot as plt 
import numpy as np 
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import (Conv2D, MaxPooling2D, Dense, 
                                     Flatten, Activation)

model = Sequential()
model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D(2,2))
model.add(Conv2D(64,(3,3), activation = 'relu'))
model.add(MaxPooling2D(2,2))
model.add(Flatten())
model.add(Dense(128, activation = 'relu'))
model.add(Dense(4,activation = 'softmax'))

此外,请注意模型中间的 input_shape 没有任何效果(就像您在 Dense 层中所做的那样)。