练习keras的卷积神经网络

本文详细介绍如何利用Keras框架和Sober算子实现图像的边缘检测,通过加载图像、预处理、构建卷积神经网络并设置权重,最终展示边缘检测结果。

https://www.cnblogs.com/lc1217/p/7324935.html

from PIL import Image
import pylab
import os
import numpy as np
from keras.models import Sequential
from keras.layers import Convolution2D,ZeroPadding2D,MaxPooling2D
from keras.optimizers import SGD

cwd = os.getcwd()
filepath = cwd + '/training-images/且/0aeab785376122c0463eec35c95e6b823f4fc988.jpg'

# 打开图片,获得PIL图像对象
pil_im = Image.open(filepath,'r')
# 把图片转换成数组形式,得到一个numpy数组对象
array_im = np.asarray(pil_im,dtype="float32")

width=array_im.shape[0]
height=array_im.shape[1]
data = np.empty((1,width,height,1),dtype="float32")
data[0,:,:,0]=array_im

# 设置sober权重
sober_weights =  [[[[[-1]],[[0]],[[1]]],[[[-2]],[[0]],[[2]]],[[[-1]],[[0]],[[1]]]]]
sober_weights = np.array(sober_weights)


# 组织卷积神经网络
model = Sequential()
model.add(ZeroPadding2D(padding=(2,2),batch_input_shape=(1,width,height,1)))
model.add(Convolution2D(filters=1,kernel_size=(3,3),strides=(1,1),activation='relu',name='conv1_1'))
model.set_weights(sober_weights)

model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(filters=1,kernel_size=(3,3),strides=(1,1),activation='relu',name='conv1_2'))
model.set_weights(sober_weights)

## 池化操作
model.add(ZeroPadding2D((1,1)))
model.add(MaxPooling2D(pool_size=1,strides=None))

# 优化函数,设定学习率等参数
sgd = SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)

# 使用mse作为loss函数
model.compile(loss='mse',optimizer=sgd)

# 预测结果
predictresult = model.predict(data,batch_size=1,verbose=0)


squeezeresult = np.squeeze(predictresult)
result = squeezeresult[:179]



figs = np.hstack([array_im,result])
# 显示图片
pylab.imshow(figs)
pylab.show()


### 如何使用 Keras Models 构建 CNN 卷积神经网络 #### 加载和预处理数据 在构建卷积神经网络之前,需要先准备好所需的数据并对其进行适当预处理。通常会使用像MNIST这样的标准图像数据集作为练习对象。 ```python from keras.datasets import mnist import numpy as np (x_train, y_train), (x_test, y_test) = mnist.load_data() # 输入数据形状调整为适合CNN输入的形式,并进行归一化操作 x_train = x_train.reshape((60000, 28, 28, 1)) x_test = x_test.reshape((10000, 28, 28, 1)) x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 ``` #### 导入必要的库 要创建一个卷积神经网络模型,首先要确保已经安装了`keras`包,并导入所需的模块: ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense ``` #### 构建卷积神经网络模型 接下来定义一个简单的CNN架构,该架构包括两个卷积层、最大池化层以及全连接层等组件。这里采用Sequential方式来搭建这个网络结构[^4]。 ```python model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(10, activation='softmax')) # 输出层有十个节点对应于十类手写数字 ``` #### 编译模型 完成上述步骤之后就可以编译所建立好的模型,在此过程中指定损失函数、优化器以及其他参数设置。 ```python model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` #### 训练模型 最后一步就是利用训练集中已有的样本对刚刚配置完毕的CNN执行拟合过程;同时也可以设定一些额外选项比如批次大小(batch size),迭代次数(epoch number)等等。 ```python history = model.fit(x_train, y_train, batch_size=128, epochs=5, verbose=1, validation_split=.1) ``` #### 评估模型性能 当训练完成后可以调用evaluate方法计算测试集上的准确率指标,以此衡量整个算法的有效程度。 ```python score = model.evaluate(x_test, y_test, verbose=0) print(f'Test loss: {score[0]}') print(f'Test accuracy: {score[1]}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值