【发布时间】:2021-03-12 11:48:28
【问题描述】:
我想用图像数据训练一个 CNN 模型。我有 2 类(面具和不面具)。我通过以下代码导入并保存数据:
data_path='/train/'
categories=os.listdir(data_path)
labels=[i for i in range(len(categories))]
label_dict=dict(zip(categories,labels))
data=[]
target=[]
for category in categories:
folder_path=os.path.join(data_path,category)
img_names=os.listdir(folder_path)
for img_name in img_names:
img_path=os.path.join(folder_path,img_name)
img=cv2.imread(img_path)
try:
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
resized=cv2.resize(gray,(500, 500))#dataset
data.append(resized)
target.append(label_dict[category])
except Exception as e:
print('Exception:',e)
data=np.array(data)/255.0
data=np.reshape(data,(data.shape[0],500, 500,1))
target=np.array(target)
new_target=np_utils.to_categorical(target)
#np.save('data',data)
#np.save('target',new_target)
我这样构建模型:
model=tf.keras.models.Sequential([
Conv2D(32, 1, activation='relu', input_shape=(500, 500, 1)),
MaxPooling2D(2,2),
Conv2D(64, 1, activation='relu'),
MaxPooling2D(2,2),
Conv2D(128, 1, padding='same', activation='relu'),
MaxPooling2D(2,2),
Flatten(),
Dropout(0.5),
Dense(256, activation='relu'),
Dense(2, activation='softmax') # dense layer has a shape of 2 as we have only 2 classes
])
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.summary 给我以下结果:
________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 500, 500, 32) 64
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 250, 250, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 250, 250, 64) 2112
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 125, 125, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 125, 125, 128) 8320
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 62, 62, 128) 0
_________________________________________________________________
flatten (Flatten) (None, 492032) 0
_________________________________________________________________
dropout (Dropout) (None, 492032) 0
_________________________________________________________________
dense (Dense) (None, 256) 125960448
_________________________________________________________________
dense_1 (Dense) (None, 2) 514
=================================================================
Total params: 125,971,458
Trainable params: 125,971,458
Non-trainable params: 0
然后我拟合模型但内核停止。我的拟合代码是:
history=model.fit(data, target, epochs=10, batch_size=128, validation_data=data_val)
我的 tensorflow 版本是 2.2.0。为什么不运行我的模型?
【问题讨论】:
-
您是否收到任何特定错误或内核死机?
-
您的模型太大,崩溃可能是由于内存不足。我建议将图像缩小到比 500x500 小得多的尺寸,并使用更小的批量大小(可能是 16 左右)作为开始。
标签: keras deep-learning tensorflow2.0 conv-neural-network model-fitting