【PaddlePaddle】 mnist手写数字识别(卷积神经网络)

2023-10-29

这篇文章主要讲解了卷积神经网络的使用。卷积神经网络可以用来提取图像特征,所以在计算机视觉上有很好的效果。

系统:ubuntu18.04
python版本:python2.7

训练模型

先把需要用到的模块导入进来。

#coding:utf-8
'''
created on February 10 23:18 2019

@author:lhy
'''
import numpy as np
import paddle as paddle
import paddle.dataset.mnist as mnist
import paddle.fluid as fluid
from PIL import Image
import matplotlib.pyplot as plt

图像识别方面,在卷积神经网络兴起之前,多层感知机一直是很流行的,下面代码就是一共有三层的感知机,前两层是全连接层,经过relu激活函数,最后一层是输出层,经过softmax进行归一化,相当于一个分类器。

#多层感知机
def multilayer_perceptron(input):
	#第一个全连接层,激活函数relu
	hidden1=fluid.layers.fc(input=input,size=100,act='relu')
	#第二个全连接层,激活函数relu
	hidden2=fluid.layers.fc(input=hidden1,size=100,act='relu')
	#以softmax为激活函数的全连接输出层,大小为label大小
	fc=fluid.layers.fc(input=hidden2,size=10,act='softmax')
	return fc

卷积神经网络普遍用在图像特征提取上,一些图像分类、目标检测、文字识别几乎都回使用到卷积神经网络作为图像的特征提取方式。卷积神经网络通常由卷积层、池化层和全连接层,有时还有Batch Normalization层和Dropout层。下面搭建一个简单的卷积神经网络,网络结构是:输入层-->卷积层-->最大池化层-->卷积层-->最大池化层-->输出层。我们可以通过调用PaddlePaddle的接口fluid.layers.conv2d()来做一次卷积操作,我们可以通过num_filters参数设置卷积核的数量,通过filter_size设置卷积核的大小,还有通过stride来设置卷积操作时移动的步长。使用fluid.layers.pool2d()接口做一次池化操作,通过参数pool_size可以设置池化的大小,通过参数pool_stride设置池化滑动的步长,通过参数pool_type设置池化的类型,目前有最大池化和平均池化,下面使用的时最大池化max,当值为avg时是平均池化。

#卷积神经网络
def convolutional_neural_network(input):
	#卷积层,卷积核大小为3*3,步长是1,一共有32个卷积核
	conv_1=fluid.layers.conv2d(input=input,num_filters=32,filter_size=3,stride=1)
	#池化层,池化核大小为2*2,步长是1,最大池化
	pool_1=fluid.layers.pool2d(input=conv_1,pool_size=2,pool_stride=1,pool_type='max')
	#第二个卷积层,卷积核大小为3*3,步长1,一共有64个卷积核
	conv_2=fluid.layers.conv2d(input=pool_1,num_filters=32,filter_size=3,stride=1)
	#第二个池化层,池化核大小是2*2,步长1,最大池化
	pool_2=fluid.layers.pool2d(input=conv_2,pool_size=2,pool_stride=1,pool_type='max')
	#以softmax为激活函数的全连接输出层,大小为label的大小
	#softmax一般用于多分类问题最后一层输出层的激活函数,作用是对输出归一化,这种情况下一般损失函数使用交叉熵
	fc=fluid.layers.fc(input=pool_2,size=10,act='softmax')
	return fc

接下来定义占位输入输出层、损失函数、优化器、reader、执行器、feeder等。

#定义占位输入层和标签层
#图像是28*28的灰度图,所以输入的形状是[1,28,28](灰度图是1通道,彩图3通道),理论上应该还有一个维度是Batch,PaddlePaddle帮我们默认设置,可以不设置Batch
image=fluid.layers.data(name='image',shape=[1,28,28],dtype='float32')
label=fluid.layers.data(name='label',shape=[1],dtype='int64')

#获取前向传播网络结果
#result=multilayer_perceptron(image)	#使用多层感知机
result=convolutional_neural_network(image) #使用卷积神经网络
	
#定义损失函数和准确率函数
cost=fluid.layers.cross_entropy(input=result,label=label)#交叉熵
avg_cost=fluid.layers.mean(cost)#整个Batch的平均值
accuracy=fluid.layers.accuracy(input=result,label=label)

#克隆主程序,获得一个预测程序
test_program=fluid.default_main_program().clone(for_test=True)

#定义优化器,使用Adam优化器
optimizer=fluid.optimizer.AdamOptimizer(learning_rate=0.001)
opts=optimizer.minimize(avg_cost)

#获取mnist数据集的reader,指定一个Batch的大小为128,一次喂入的张量shape是[128,1,28,28]
train_reader=paddle.batch(mnist.train(),batch_size=128)
test_reader=paddle.batch(mnist.test(),batch_size=128)

#定义执行器
place=fluid.CPUPlace()
exe=fluid.Executor(place)
#初始化参数
exe.run(fluid.default_startup_program())

#定义输入数据维度
feeder=fluid.DataFeeder(place=place,feed_list=[image,label])

接下来开始训练5个pass,每一个pass结束,就使用测试集进行测试。

#开始训练,5个pass
for pass_id in range(5):
	#开始训练
	for batch_id,data in enumerate(train_reader()):
		train_cost,train_acc=exe.run(program=fluid.default_main_program(),feed=feeder.feed(data),fetch_list=[avg_cost,accuracy])
		#每100个batch打印一次信息
		if batch_id%100==0:
			print('Pass:%d Batch:%d Cost:%0.5f Accuracy:%0.5f'%(pass_id,batch_id,train_cost[0],train_acc[0]))

	#每一个pass进行一次测试
	test_accs=[]
	test_costs=[]
	for batch_id,data in enumerate(test_reader()):
		test_cost,test_acc=exe.run(program=test_program,feed=feeder.feed(data),fetch_list=[avg_cost,accuracy])
		test_accs.append(test_acc[0])
		test_costs.append(test_cost[0])
	#求测试结果的平均值
	test_cost=(sum(test_costs)/len(test_costs))
	test_acc=(sum(test_accs)/len(test_accs))
	print('Test:%d Cost:%0.5f Accuracy:%0.5f'%(pass_id,test_cost,test_acc))

输出结果:

Pass:0 Batch:0 Cost:4.91017 Accuracy:0.07031
Pass:0 Batch:100 Cost:0.16996 Accuracy:0.94531
Pass:0 Batch:200 Cost:0.15141 Accuracy:0.96875
Pass:0 Batch:300 Cost:0.13084 Accuracy:0.96094
Pass:0 Batch:400 Cost:0.17776 Accuracy:0.96875
Test:0 Cost:0.09316 Accuracy:0.97063
Pass:1 Batch:0 Cost:0.13053 Accuracy:0.96875
Pass:1 Batch:100 Cost:0.10468 Accuracy:0.96875
Pass:1 Batch:200 Cost:0.08788 Accuracy:0.96875
Pass:1 Batch:300 Cost:0.09806 Accuracy:0.97656
Pass:1 Batch:400 Cost:0.10122 Accuracy:0.96875
Test:1 Cost:0.08290 Accuracy:0.97488
Pass:2 Batch:0 Cost:0.09273 Accuracy:0.98438
Pass:2 Batch:100 Cost:0.04793 Accuracy:0.98438
Pass:2 Batch:200 Cost:0.05122 Accuracy:0.98438
Pass:2 Batch:300 Cost:0.13064 Accuracy:0.97656
Pass:2 Batch:400 Cost:0.07900 Accuracy:0.96094
Test:2 Cost:0.10492 Accuracy:0.97340
Pass:3 Batch:0 Cost:0.06448 Accuracy:0.98438
Pass:3 Batch:100 Cost:0.02005 Accuracy:0.99219
Pass:3 Batch:200 Cost:0.07889 Accuracy:0.97656
Pass:3 Batch:300 Cost:0.09428 Accuracy:0.97656
Pass:3 Batch:400 Cost:0.08107 Accuracy:0.97656
Test:3 Cost:0.20494 Accuracy:0.95896
Pass:4 Batch:0 Cost:0.19759 Accuracy:0.96875
Pass:4 Batch:100 Cost:0.08347 Accuracy:0.97656
Pass:4 Batch:200 Cost:0.03714 Accuracy:0.97656
Pass:4 Batch:300 Cost:0.08429 Accuracy:0.97656
Pass:4 Batch:400 Cost:0.02875 Accuracy:0.98438
Test:4 Cost:0.10599 Accuracy:0.97577

可以看到,利用卷积神经网络,训练集的准确率达到了98.4%,而在测试集上的准确率达到了97.5%。

进行预测

首先我们需要对输入的图片进行预处理,首先转化成灰度图片(模式是’L’),然后改变图片大小成28*28,将图片变成数组,再进行归一化:
需要注意的是,输入的照片最好是黑底白字,因为mnist数据集的数据是黑底白字的照片转化成的数组。

#训练完成后,我们可以使用从主程序中克隆的test_program来预测自己的图像
#对自己的图像进行预处理,首先灰度化,然后压缩图像大小为28*28,接着将图像转换成一维向量,最后在对一维向量进行归一化处理
def load_image(file):
	im=Image.open(file).convert('L')
	im=im.resize((28,28),Image.ANTIALIAS)
	im=np.array(im).reshape(1,1,28,28).astype(np.float32)
	im=im/255.0 *2.0 -1.0#归一化
	#mnist数据集中的图片默认格式是黑底白字,所以如果有需要则要进行变换
	return im

我们放这样一张照片,显示的数字是3:
在这里插入图片描述
然后加载这张照片,并用克隆的主程序进行预测,label随便传入一个值(因为不需要用到损失函数,只需要用到result)。

#加载数据进行预测
img=load_image('3.jpeg')
results=exe.run(program=test_program,feed={'image':img,'label':np.array([[1]]).astype('int64')},fetch_list=[result])

#将预测标签概率最大的下标打印出来
lab=np.argsort(results)#np.argsort()返回数组值从小到大的索引值
print("图像预测的结果为:%d"%(lab[0][0][-1]))#选择值最大对应的索引值

预测结果:

图像预测的结果为:3

可见,训练的出的程序能正确得出一张图片的数字值。

完整代码

完整代码如下:

#coding:utf-8
'''
created on February 10 23:18 2019

@author:lhy
'''
import numpy as np
import paddle as paddle
import paddle.dataset.mnist as mnist
import paddle.fluid as fluid
from PIL import Image
import matplotlib.pyplot as plt

#多层感知机
def multilayer_perceptron(input):
	#第一个全连接层,激活函数relu
	hidden1=fluid.layers.fc(input=input,size=100,act='relu')
	#第二个全连接层,激活函数relu
	hidden2=fluid.layers.fc(input=hidden1,size=100,act='relu')
	#以softmax为激活函数的全连接输出层,大小为label大小
	fc=fluid.layers.fc(input=hidden2,size=10,act='softmax')
	return fc

#卷积神经网络
def convolutional_neural_network(input):
	#卷积层,卷积核大小为3*3,步长是1,一共有32个卷积核
	conv_1=fluid.layers.conv2d(input=input,num_filters=32,filter_size=3,stride=1)
	#池化层,池化核大小为2*2,步长是1,最大池化
	pool_1=fluid.layers.pool2d(input=conv_1,pool_size=2,pool_stride=1,pool_type='max')
	#第二个卷积层,卷积核大小为3*3,步长1,一共有64个卷积核
	conv_2=fluid.layers.conv2d(input=pool_1,num_filters=32,filter_size=3,stride=1)
	#第二个池化层,池化核大小是2*2,步长1,最大池化
	pool_2=fluid.layers.pool2d(input=conv_2,pool_size=2,pool_stride=1,pool_type='max')
	#以softmax为激活函数的全连接输出层,大小为label的大小
	#softmax一般用于多分类问题最后一层输出层的激活函数,作用是对输出归一化,这种情况下一般损失函数使用交叉熵
	fc=fluid.layers.fc(input=pool_2,size=10,act='softmax')
	return fc

#定义占位输入层和标签层
#图像是28*28的灰度图,所以输入的形状是[1,28,28](灰度图是1通道,彩图3通道),理论上应该还有一个维度是Batch,PaddlePaddle帮我们默认设置,可以不设置Batch
image=fluid.layers.data(name='image',shape=[1,28,28],dtype='float32')
label=fluid.layers.data(name='label',shape=[1],dtype='int64')

#获取前向传播网络结果
#result=multilayer_perceptron(image)	#使用多层感知机
result=convolutional_neural_network(image)
	
#定义损失函数和准确率函数
cost=fluid.layers.cross_entropy(input=result,label=label)#交叉熵
avg_cost=fluid.layers.mean(cost)#整个Batch的平均值
accuracy=fluid.layers.accuracy(input=result,label=label)

#克隆主程序,获得一个预测程序
test_program=fluid.default_main_program().clone(for_test=True)

#定义优化器,使用Adam优化器
optimizer=fluid.optimizer.AdamOptimizer(learning_rate=0.001)
opts=optimizer.minimize(avg_cost)

#获取mnist数据集的reader,指定一个Batch的大小为128,一次喂入的张量shape是[128,1,28,28]
train_reader=paddle.batch(mnist.train(),batch_size=128)
test_reader=paddle.batch(mnist.test(),batch_size=128)

#定义执行器
place=fluid.CPUPlace()
exe=fluid.Executor(place)
#初始化参数
exe.run(fluid.default_startup_program())

#定义输入数据维度
feeder=fluid.DataFeeder(place=place,feed_list=[image,label])

#开始训练,5个pass

for pass_id in range(5):
	#开始训练
	for batch_id,data in enumerate(train_reader()):
		train_cost,train_acc=exe.run(program=fluid.default_main_program(),feed=feeder.feed(data),fetch_list=[avg_cost,accuracy])
		#每100个batch打印一次信息
		if batch_id%100==0:
			print('Pass:%d Batch:%d Cost:%0.5f Accuracy:%0.5f'%(pass_id,batch_id,train_cost[0],train_acc[0]))

	#每一个pass进行一次测试
	test_accs=[]
	test_costs=[]
	for batch_id,data in enumerate(test_reader()):
		test_cost,test_acc=exe.run(program=test_program,feed=feeder.feed(data),fetch_list=[avg_cost,accuracy])
		test_accs.append(test_acc[0])
		test_costs.append(test_cost[0])
	#求测试结果的平均值
	test_cost=(sum(test_costs)/len(test_costs))
	test_acc=(sum(test_accs)/len(test_accs))
	print('Test:%d Cost:%0.5f Accuracy:%0.5f'%(pass_id,test_cost,test_acc))

#训练完成后,我们可以使用从主程序中克隆的test_program来预测自己的图像
#对自己的图像进行预处理,首先灰度化,然后压缩图像大小为28*28,接着将图像转换成一维向量,最后在对一维向量进行归一化处理
def load_image(file):
	im=Image.open(file).convert('L')
	im=im.resize((28,28),Image.ANTIALIAS)
	im=np.array(im).reshape(1,1,28,28).astype(np.float32)
	im=im/255.0 *2.0 -1.0#归一化
	#mnist数据集中的图片默认格式是黑底白字,所以如果有需要则要进行变换
	return im

#加载数据进行预测
img=load_image('3.jpeg')
results=exe.run(program=test_program,feed={'image':img,'label':np.array([[1]]).astype('int64')},fetch_list=[result])

#将预测标签概率最大的下标打印出来
lab=np.argsort(results)#返回数组值从小到大的索引值
print("图像预测的结果为:%d"%(lab[0][0][-1]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【PaddlePaddle】 mnist手写数字识别(卷积神经网络) 的相关文章

  • js事件的绑定方式

    我们现在绑定的事件都是 onxxxx的方式 这个是DOM0级的事件绑定方式 注 这个方式不是很好 弊端 一旦写了第二个事件 那么第一个就会被覆盖 案例 var oDiv document querySelector div oDiv onc
  • gethup.sh

    docker exec it geth cluster1 bin bash geth datadir data0 networkid 779977 console root 85547cf26bca ethutil cat gethup s
  • 某易云音乐JS逆向案例

    某易云音乐参数破解 目标 aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvc2VhcmNoL20vP3M9JUU2JTg4JTkwJUU5JTgzJUJEJnR5cGU9MQ 某易云音乐是大家喜爱的音乐平台 有小伙伴问我 这
  • 网关的理解

    一 什么是网关 网关 Gateway 又称网间连接器 协议转换器 网关在传输层上以实现网络互连 是最复杂的网络互连设备 仅用于两个高层协议不同的网络互连 二 如何来理解网关 大家都知道 从一个房间走到另一个房间 必然要经过一扇门 同样 从一
  • Qt自绘控件之扇形统计图

    首先绘制区域扇形需要先注意一下几点 QPainter中绘制完整的圆等于5760 16 360 此处数值用于计算每一块扇形区域所显示的 需要了解一下扇形二等分线的计算方法 要注意做坐标原点转换 此处为屏幕分辨率自适应 const qreal
  • Keil 中出现“encountered an improper argument” 解决办法

    Keil 中出现 encountered an improper argument 解决办法 出现这种情况就是因为目录文件下带有中文路径 不要弄成中文路径就可以解决了
  • HyperledgerFabric资产案例链码实例

    案例分析 功能 用户开户和销户 资产登记 资产上链 与具体的用户绑定 资产转让 资产所有权变更 查询功能 用户查询 资产查询 资产变更的历史查询 业务实体 用户 名字 身份证 标识 资产列表 资产 名字 标识 特殊属性列表 车 排量 品牌
  • linux基础操作命令符(下)

    linux基础操作命令符 上 linux笔记查询 关于用户 用户的管理 用户组的管理 权限的管理 SSH 解决等待缓存 无法获得锁问题 关于ping命令 ssh 远程连接 ssh远程拷贝的命令 查看linux本地配置 查看磁盘文件目录 df
  • 亚马逊+纽约大学开源图神经网络框架DGL:新手友好,与主流框架无缝衔接

    量子位 授权转载 公众号 QbitAI 最近 纽约大学 纽约大学上海分校 AWS上海研究院以及AWS MXNet Science Team共同开源了一个面向图神经网络及图机器学习的全新框架 命名为Deep Graph Library DGL
  • 1800*D. Nested Segments(数组数组&&离散化)

    解析 按照右端点进行排序 这样某个区间包含的区间只能是在其前面的区间中 所以维护左端点 x 的出现次数 这样我们在查询某个区间 x y 的时候 只需要求 x y 之间包含多少个前面区间的 x 即可 前缀和 因为 前面区间的 y 显然小于当前
  • 微信小程序——常用组件的属性介绍

    常用的组件内容标签 text 文本组件 类似于HTML中的span标签 是一个行内元素 rich text 富文本标签 支持把HTML字符串渲染为WXML结构 text标签的基本使用 通过text组件的selectable属性 实现长按选中
  • C++中的左值与右值(二

    C 中的左值与右值 二 以前以为自己把左值和右值已经弄清楚了 果然发现自己还是太年轻了 下面的这些东西是自己通过在网上拾人牙慧 加上自己的理解写的 1 2 怎么区分左值和右值 知乎大神 顾露的回答 3 我们不能直接定义一个引用的引用 但是
  • ts重点学习85-map类型

  • Idea更新新版本报错,Some conflicts were found in the installation area.

    笔者使用的Idea是2021 2版本 今天直接升级发现报错 找了下解决方法 供大家参考 升级过程 请添加图片描述 https img blog csdnimg cn eaa75e5af7d243d8a2a3f8a731feb6c1 png
  • 【计算机视觉

    文章目录 一 检测相关 8篇 1 1 Explainable Cost Sensitive Deep Neural Networks for Brain Tumor Detection from Brain MRI Images consi
  • 基于java的出租车预约网站

    出租车预约网站能够有效的解决大家上班下班打不到车 加快吃饭逛街的效率 天阴下雨无障碍出行 自己有车不舍得开等问题 使得用户查询车辆信息更加方面快捷 同时便于管理员对车辆和用户的管理 从而给出租车管理公司的预约管理工作带来更高的效率 因此 我
  • CentOS 6 时间,时区,设置修改及时间同步

    一 时区 显示时区 date help 获取帮助 date R date z 上面两个命令都可 root localhost date R date z
  • 数据清洗基本概念

    1 基本概念 数据清洗从名字上也看的出就是把 脏 的 洗掉 指发现并纠正数据文件中可识别的错误的最后一道程序 包括检查数据一致性 处理无效值和缺失值等 因为数据仓库中的数据是面向某一主题的数据的集合 这些数据从多个业务系统中抽取而来而且包含
  • 从零实现一个在线考试系统

    晚上好 我是老北 公众号 GitHub 指北 会推荐 GitHub 上有用有趣的项目 挖掘开源的价值 欢迎关注 基于 SpringBoot Mybatis Plus Shiro mysql redis 构建的智慧云智能教育平台 架构上使用完
  • 前端交互设计利器--MVVM框架avalon.js

    前端交互设计 少不了使用js框架 特别是近来非常火爆的MVVM框架 MVVM框架的确是前端交互设计的利器 最近接触到国内大牛编写的前端框架 avalon js 功能强大 兼容性好 非常好用 MVVM框架核心思想是模型数据与视图绑定 改变了模

随机推荐

  • AI聊天机器人,你更爱哪个?

    嗨 各位同学 最近这几个人工智能助手可是火得很啊 叮咚 AI哥们儿ChatGPT已经很强了 轻松应对各种问题 文笔挺不错的 咻 Anthropic公司的Claude也很给力 聊天能力十分强大 嗖 Google新出的Bard看着也很厉害 刚一
  • 中国自主可控计算机大会、,2019CCF自主可控计算机大会召开

    nbsp nbsp nbsp nbsp光明网讯 齐柳明 7月23日至24日 2019CCF自主可控计算机大会 在北京召开 会议以 应用驱动 协同创新 自主可控发展的源泉和动力 为主题 大会在目前自主可控计算机发展态势良好基础上 针对相关信息
  • css 选择除了某个类下的所有某种元素

    要求 选择除了某个类下的所有input输入框 非页脚下的输入框高度 input not bs table foot input height 40px important line height 40px important
  • PyTorch框架中使用早停止Early Stopping(含详细代码)

    文章目录 1 什么是早停止 为什么使用早停止 2 如何使用早停止 3 Refferences 1 什么是早停止 为什么使用早停止 早停止 Early Stopping 是 当达到某种或某些条件时 认为模型已经收敛 结束模型训练 保存现有模型
  • vue.config.js基本配置

    方法一 vue3 vue config js const defineConfig require vue cli service module exports defineConfig transpileDependencies true
  • visual studio下C4146错误分析与整理

    C4146报错原因分析 标签 空格分隔 C C4146 一元负运算符应用于无符号类型 结果仍为无符号型 文章目录 C4146报错原因分析 toc 事发现场 翻车过程 翻车原因 解决方案 番外篇 事发现场 include
  • 如何看待越来越多年轻人追捧「摸鱼哲学」,拒绝努力的年轻人真比老一辈活得更通透吗?

    题目是我在知乎上看到的 有些小伙伴应该也看到了 不知道有没有触动到你 反正我是心有戚戚焉 上周五 我去了一趟郑州 见了几个大学同学 吃了一顿饭 喝了点小酒之后 我们谈了很多各自的现状 龙仔和小龙都说 公司现在的年轻人 真不知道在想些什么 任
  • Linux主流架构运维工作简单剖析

    随着IT运维的不断发展 尤其的Linux的飞速发展 越来越多的企业开始使用Linux操作系统平台 例如CentOS RedHat Ubuntu Fedora等等 成千上亿个网站涌现在当今互联网 互联网已经成为必不可少的工具 那今天我们跟大家
  • 数据库原理 知识点总结

    名词积累 数据库 Database 存放和提供数据的 库房 数据 Data 数据库中存储的基本对象 数据库管理系统 DBMS 位于用户与操作系统之间的一层数据管理软件 数据库系统 Database System 包括数据库 DBMS 应用系
  • Git提交代码或文件

    一 直接通过git命令提交 1 git add 将所有文件加到提交区 2 git commit m 注释 提交注释 3 git pull rebase origin master 拉去代码 且把提交的线路融合在一起 4 git push u
  • Java中转化Stream流及多个Stream流如何合并

    题目 如何将对象转化为Stream流及多个Stream流如何合并 特别注意基本类型数组转化成的流 准备 Java中Stream流是JDK1 8出现的新特性 Stream流多用于过滤 转换 统计等 Stream类的静态方法 Stream co
  • javaScript-----数组使用字符串作为下标

    原文地址 http blog csdn net chenssy article details 7366160 首先Array是从Object那里继承下 它具备Object所有的功能和特性 下面是Object的情况 html view pl
  • 完美的Apache静态.htaccess文件 [discuz和home带301重定向]

    完美的Apache静态 htaccess文件 discuz和home带301重定向 本帖最后由 下砂 于 2009 11 13 10 32 编辑 先后修改过三次 加了301重定向 顶级域名和论坛二级域名 后rewrite base保持 状态
  • 无法加载训练好的.h5权重

    Unable to open file unable to open file name h5 errno 2 error message No such file or directory 确认模型是正确的情况下 最好的办法是升级h5py
  • AD中如何做出爱心❤的丝印

    不知道有没有小伙伴试过在AD中做一个爱心的丝印 今天在这里就跟大家分享一下 如何做一个带爱心 的丝印 具体方法就是我们在字符串输入框中输入相应的内容和 爱心 的话可以通过搜狗输入法打一个 心 字就会弹出哦 选择字体 MS UI Gothic
  • 《逻辑与计算机设计基础(原书第5版)》——2.9 硬件描述语言—VHDL

    2 9 硬件描述语言 VHDL 由于硬件描述语言用来描述和设计硬件 故在使用该语言编程时 应牢记底层的硬件实现 特别是当你的设计将用来综合时 例如 如果忽略将要生成的硬件 那么你可能会用低效的硬件描述语言设计出一个大且复杂的门级结构 而实际
  • Harmony Codelab 样例—弹窗基本使用

    一 介绍 本篇 Codelab 主要基于 dialog 和 button 组件 实现弹窗的几种自定义效果 具体效果有 1 警告弹窗 点击确认按钮弹窗关闭 2 确认弹窗 点击取消按钮或确认按钮 触发对应操作 3 加载弹窗 展示加载中效果 4
  • 我与西门子的面试全过程(一面+二面)_2008校园招聘_笔试与面试分享_UNUS.CN

    导读 很庆幸自己能够参加世界500强企业 西门子的面试 经过了一面和二面 虽然最后没有被录取 但高兴的是我们广工有两个进了 在这里祝福他们 今天终于有空 写下自己与西门子的全过程 写下这篇文章 并不是想炫耀 而是真心希望对后来者有帮助 在学
  • 【LeetCode】426. 将二叉搜索树转化为排序的双向链表(剑指 Offer 36)

    一 题目 将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 对于双向循环列表 你可以将左右孩子指针作为双向循环链表的前驱和后继指针 第一个节点的前驱是最后一个节点 最后一个节点的后继是第一个节点 特别地 我们希望可以 就地 完成转换
  • 【PaddlePaddle】 mnist手写数字识别(卷积神经网络)

    这篇文章主要讲解了卷积神经网络的使用 卷积神经网络可以用来提取图像特征 所以在计算机视觉上有很好的效果 系统 ubuntu18 04 python版本 python2 7 目录 训练模型 进行预测 完整代码 训练模型 先把需要用到的模块导入