唐十 2022-07-18 18:32 采纳率: 57.1%
浏览 112
已结题

使用Pycharm运行以下LeNet5的模型进行mnist的训练时报错且不运行

使用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之后不爆红了,但是训练速度下降了,怎么处理?

  • 写回答

2条回答 默认 最新

  • 林地宁宁 2022-07-18 19:51
    关注

    严重怀疑是你 TF 装的过程出了问题,建议重新安装或者使用 conda 隔离环境,可以参考 https://tf.wiki/zh_hans/basic/installation.html 的教程,安装合适版本的 CUDA Toolkit 和 CUDNN,再看看问题会不会出现。还有要注意你 3060 显卡要用 CUDA 11 以上,例如现在 TF 官方推荐使用 CUDA 11.2 和 CUDNN 8.1.0。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 7月18日

悬赏问题

  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗