卷积神经网络(简单实现案例)_沐雨金鳞-程序员宅基地_卷积神经网络实例

技术标签: cnn  

案例: 

 代码:

import numpy as np
import tensorflow as tf

'''
随机产生一个输入数据
'''
# 输入数据:(1,32,32,1):(输入一张图,高度32,宽度32,通道数为1)
input_data = np.random.randn(32,32).reshape(1,32,32,1)

'''
第一层卷积
'''
# 卷积核,(5,5,1,8):(高度5,宽度5,通道数1,输出卷积核个数8)
filter_ = np.random.randn(5,5,8).reshape(5,5,1,8)

# 第一层卷积,(1,1,1,1):(1,高度方向移动步长,宽度方向移动步长),'V':不会自动补零
conv = tf.nn.conv2d(input=input_data,filter=filter_,strides=[1,1,1,1],padding='VALID')

# 池化,(1,2,2,1):(1,池化核高度,池化核宽度,1),(1,2,2,1):(高度方向移动步长,宽度方向移动步长),'S':自动补零
pool = tf.nn.max_pool(conv,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

# 激活
relu = tf.nn.relu(pool)

# dropout 保留60%连接
dropout = tf.nn.dropout(relu,keep_prob=0.6)

'''
第二层卷积
'''
# 卷积核
filter2 = np.random.randn(5,5,8,20)

conv2 = tf.nn.conv2d(input=dropout,filter=filter2,strides=[1,1,1,1],padding='VALID')

# 池化
pool2 = tf.nn.max_pool(conv2,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

# 激活
sigmod = tf.nn.sigmoid(pool2)

# dropout
dropout2 = tf.nn.dropout(pool2,keep_prob=0.5)

'''
全连接层
'''
# 权重
dense = np.random.randn(500,120)
fc = tf.reshape(dropout2,shape=[1,5*5*20])
# 相乘
conn = tf.matmul(fc,dense)

# 输出层
w = np.random.randn(120,9)
b = np.random.randn(9)
out = tf.matmul(conn,w)+b
print(out)

with tf.Session() as sess:
    print(sess.run(out))

输出:

Tensor("add:0", shape=(1, 9), dtype=float64)


[[ 56292.23092699 -25663.07097064  10046.3161544  -10689.08116037
   95927.7495999   31923.13009604 -29105.7761752   76256.49429168
   49508.435624  ]]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38262266/article/details/100113590

智能推荐

随便推点