使用Pycharm运行以下LeNet5的模型进行mnist的训练时报错且不运行
'''
@author: 唐十
@project: AI
@file: LeNet_5.py
@time: 2022/7/18 14:55
@desc:使用LeNet_5模型
'''
from keras.datasets import mnist
import numpy as np
from keras.utils import to_categorical
from matplotlib import pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Conv2D
from keras.layers import AvgPool2D
from keras.layers import Flatten
from keras.optimizers import SGD
'''
LeNet_5使用边长为5的卷积核,卷积前后的图片边长有如下规律:m=n-f+1,m为卷积后边长,n为卷积前边长,f为卷积核边长
所以我们第一次卷积之后得到的是边长为24的图片
'''
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
# 申明一个模型
model = Sequential()
'''
这里使用的是卷积,所以不需要拉伸,但是我们需要明确通道数
'''
X_train = X_train.reshape(60000, 28, 28, 1) / 255.0
X_test = X_test.reshape(10000, 28, 28, 1) / 255.0
# 申明一个卷积层——filters表示有几个卷积核,kernel_size表示卷积核的大小,strides表示每次卷积核移动的步,input_shape表示输入的形状,灰度图*1彩色图*3,padding表示填充模式,有些时候为了避免卷积之后图片大小变化,会使用same的padding,在卷积前的图片上加一圈像素,此处使用valid表示不加
conv2D1=Conv2D(filters=6,kernel_size=(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu')
model.add(conv2D1)
# 申明一个池化层
avgPool2D1=AvgPool2D(pool_size=(2,2))
model.add(avgPool2D1)
# 申明一个卷积层,不是第一层就不用申明形状了,会自动推断
conv2D2=Conv2D(filters=16,kernel_size=(5,5),strides=(1,1),padding='valid',activation='relu')
model.add(conv2D2)
# 申明一个池化层
avgPool2D2=AvgPool2D(pool_size=(2,2))
model.add(avgPool2D2)
# 卷积神经网络和全连接神经网络之间需要一个Flatten去铺开数据
flatten=Flatten()
model.add(flatten)
# 我们采用One-Hot的编码模式,对Y进行分类,由于最终结果为0-9这10种可能,因此我们需要十位One-Hot编码
'''
One-Hot编码:只有一位是1,其余是0
'''
Y_train = to_categorical(Y_train, 10)
Y_test = to_categorical(Y_test, 10)
# units 表示这一层有几个神经元,activation表示激活函数是哪个,input_dim表示要接收的参数的个数
# 第一层(一个神经元接收一个x)
dense1 = Dense(units=120, activation='relu')
dense2 = Dense(units=84, activation='relu')
# dense1=Dense(units=3,activation='relu',input_dim=2)
# units 表示这一层有几个神经元,activation表示激活函数是哪个,input_dim表示要接收的参数的个数
# 第二层(第二层接收的是第一层的数据,不接收x)
'''
由于最终结果为0-9这10种可能,因此需要10个输出神经元,而对这些输出,我们采用One-Hot的编码模式
使用softmax作为激活函数,使得最终所有可能的概率之和等于1
'''
dense3 = Dense(units=10, activation='softmax')
model.add(dense1)
model.add(dense2)
model.add(dense3)
# 为模型添加配置:loss规定代价函数是什么,此处采用categorical_crossentropy(交叉熵),optimizer表示优化器,这里使用sgd随机梯度下降去优化,metrics为评估标准,accuracy的意思是准确度
# model.compile(loss='mean_squared_error',optimizer='sgd',metrics=['accuracy'])# 这么写就代表使用默认学习率的sgd,想要指定学习率要使用对象
# 关于多分类的输出,使用交叉熵代价函数
model.compile(loss='categorical_crossentropy', optimizer=SGD(learning_rate=0.05), metrics=['accuracy'])
# 开始训练,第一个参数为输入的数据,第二个数据为标准答案,第三个数据为epochs训练回合数,我们把在全部样本的一次训练称为一个回合,第四个参数batch_size表示批量数,表示一次训练使用多少个样本
model.fit(X_train, Y_train, epochs=5000, batch_size=48)
# 测试模型
loss, accuracy = model.evaluate(X_test, Y_test)
print("损失率是:" + str(loss))
print("匹配度是:" + str(accuracy))
运行结果及报错内容
E:\Code\AI\venv\Scripts\python.exe "E:\PyCharm 2021.3.3\plugins\python\helpers\pydev\pydevconsole.py" --mode=client --port=49250
import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['E:\\Code\\AI', 'E:/Code/AI'])
PyDev console: starting.
Python 3.10.5 (tags/v3.10.5:f377153, Jun 6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
runfile('E:/Code/AI/com/shi/tang/lesson9/LeNet_5.py', wdir='E:/Code/AI/com/shi/tang/lesson9')
Backend TkAgg is interactive backend. Turning interactive mode on.
2022-07-18 18:28:02.609732: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-07-18 18:28:02.950669: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1532] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 9622 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3060, pci bus id: 0000:01:00.0, compute capability: 8.6
Epoch 1/5000
进程已结束,退出代码-1073740791 (0xC0000409)
还有一些问题
我之前训练的时候会提示少dll,但是仍然能正常训练,在我加入相应dll之后不爆红了,但是训练速度下降了,怎么处理?