利用tensorflow实现神经网络卷积层、池化层、全连接层

第一步:导入相应的库

import tensorflow as tf
import numpy as np
  • 1
  • 2

第二步:准备数据(随机生成一维数据)

data_size=25  
x_data=np.random.normal(size=data_size)
x_input_1d=tf.placeholder(dtype=tf.float32,shape=[x_data])
  • 1
  • 2
  • 3

第三步:搭建一个简单的卷积层,并输出(这里进行扩维是因为原始数据是一维的,我们需要把它扩到四维进行计算)

def conv_1d(input_1d,my_filter):
    input_2d=tf.expand_dims(input_1d,0)
    input_3d=tf.expand_dims(input_2d,0)
    input_4d=tf.expand_dims(input_3d,3)
    conv_output=tf.nn.conv2d(input_4d,my_filter,strides=[1,1,1,1],padding="VALID")
    conv_output_1d=tf.squeeze(conv_output)
    return (conv_output_1d)
my_filter=tf.Variable(tf.random_normal(shape=[1,1,5,1])) #类似于窗口大小
#卷积输出
my_conv_output=conv_1d(x_input_1d,my_filter=my_filter)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第四步:定义一个激活函数

def activation(my_conv_output):
    return tf.nn.sigmoid(my_conv_output)
  • 1
  • 2

第五步:池化层搭建,并输出(扩维的原因与上面类似)

def max_pooling(input_1d,width):
    input_2d=tf.expand_dims(input_1d,0)
    input_3d=tf.expand_dims(input_2d,0)
    input_4d=tf.expand_dims(input_3d,3)
    max_pool_output=tf.nn.max_pool(input_4d,ksize=[1,1,width,1],strides=[1,1,1,1],padding="VALID")
    max_pool_output_1d=tf.squeeze(max_pool_output)
    return (max_pool_output_1d) 

my_max_output=max_pooling(conv_out,5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第六步:搭建全连接层,并输出

def fully_connect_layer(input_layer,output_nums):
    weight_shape=tf.squeeze(tf.stack([tf.shape(input_layer),[output_nums]]))
    weight=tf.Variable(tf.random_normal(shape=weight_shape,stddev=0.1))
    bias=tf.Variable(tf.random_normal(shape=[output_nums]))

    #进行矩阵相乘时,先将一维数组转换成矩阵
    input_2d=tf.expand_dims(input_layer,0)
    full_output=tf.add(tf.matmul(input_2d,weight),bias)
    full_output_1d=tf.squeeze(full_output)
    return (full_output_1d)

#全连接层的输出
my_full_output=fully_connect_layer(my_max_output,5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

第七步:创建会话,并初始化所有变量

sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)

#获取变量值
feed_dict={x_input_1d:x_data}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最后一步:输出

print("CONV"+sess.run(my_conv_output,feed_dict=feed_dict))
print("Max_pool"+sess.run(my_max_output,feed_dict=feed_dict))
print("Full_output"+sess.run(my_full_output,feed_dict=feed_dict))

猜你喜欢

转载自blog.csdn.net/kwame211/article/details/80221734