TensorflowTutorial_一维数据构造简单CNN
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了TensorflowTutorial_一维数据构造简单CNN,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6926字,纯文字阅读大概需要10分钟。
内容图文
使用一维数据构造简单卷积神经网络
觉得有用的话,欢迎一起讨论相互学习~Follow Me
神经网络对于一维数据非常重要,时序数据集、信号处理数据集和一些文本嵌入数据集都是一维数据,会频繁的使用到神经网络。我们在此利用一组一维数据构造卷积层-最大池化层-全连接层的卷积神经网络。希望给大家使用CNN处理一维数据一些帮助。
参考代码
# Implementing Different Layers
# ---------------------------------------
#
# We will illustrate how to use different types
# of layers in TensorFlow
#
# The layers of interest are:
# (1) Convolutional Layer卷积层
# (2) Activation Layer激活层
# (3) Max-Pool Layer池化层
# (4) Fully Connected Layer 全连接层
#
# We will generate two different data sets for this
# script, a 1-D data set (row of data) and
# a 2-D data set (similar to picture)
import tensorflow as tf
import matplotlib.pyplot as plt
import csv
import os
import random
import numpy as np
import random
from tensorflow.python.framework import ops
ops.reset_default_graph()
# ---------------------------------------------------|# -------------------1D-data-------------------------|# ---------------------------------------------------|# Create graph session 创建初始图结构
ops.reset_default_graph()
sess = tf.Session()
# parameters for the run运行参数
data_size =25
conv_size =5# 卷积核宽度方向的大小
maxpool_size =5# 池化层核宽度方向上的大小
stride_size =1# 卷积核宽度方向上的步长# ensure reproducibility 确保复现性
seed =13
np.random.seed(seed)
tf.set_random_seed(seed)
# Generate 1D data 生成一维数据
data_1d = np.random.normal(size=data_size)
# Placeholder
x_input_1d = tf.placeholder(dtype=tf.float32, shape=[data_size])
# --------Convolution--------def conv_layer_1d(input_1d, my_filter, stride):
# TensorFlow‘s ‘conv2d()‘ function only works with 4D arrays:# [batch, height, width, channels], we have 1 batch, and# width = 1, but height = the length of the input, and 1 channel.# So next we create the 4D array by inserting dimension 1‘s.# 关于数据维度的处理十分关键,因为tensorflow中卷积操作只支持四维的张量,# 所以要人为的把数据补充为4维数据[1,1,25,1]
input_2d = tf.expand_dims(input_1d, 0)
input_3d = tf.expand_dims(input_2d, 0)
input_4d = tf.expand_dims(input_3d, 3)
# Perform convolution with stride = 1, if we wanted to increase the stride,# to say ‘2‘, then strides=[1,1,2,1]
convolution_output = tf.nn.conv2d(input_4d, filter=my_filter, strides=[1, 1, stride, 1], padding="VALID")
# Get rid of extra dimensions 去掉多余的层数,只保留数字
conv_output_1d = tf.squeeze(convolution_output)
return (conv_output_1d)
# Create filter for convolution.
my_filter = tf.Variable(tf.random_normal(shape=[1, conv_size, 1, 1]))
# Create convolution layer
my_convolution_output = conv_layer_1d(x_input_1d, my_filter, stride=stride_size)
# --------Activation--------def activation(input_1d):
return (tf.nn.relu(input_1d))
# Create activation layer
my_activation_output = activation(my_convolution_output)
# --------Max Pool--------def max_pool(input_1d, width, stride):
# Just like ‘conv2d()‘ above, max_pool() works with 4D arrays.# [batch_size=1, width=1, height=num_input, channels=1]# 因为在处理卷积层的结果时,使用squeeze函数对结果输出进行降维,所以此处要将最大池化层的维度提升为4维
input_2d = tf.expand_dims(input_1d, 0)
input_3d = tf.expand_dims(input_2d, 0)
input_4d = tf.expand_dims(input_3d, 3)
# Perform the max pooling with strides = [1,1,1,1]# If we wanted to increase the stride on our data dimension, say by# a factor of ‘2‘, we put strides = [1, 1, 2, 1]# We will also need to specify the width of the max-window (‘width‘)
pool_output = tf.nn.max_pool(input_4d, ksize=[1, 1, width, 1],
strides=[1, 1, stride, 1],
padding=‘VALID‘)
# Get rid of extra dimensions
pool_output_1d = tf.squeeze(pool_output)
return (pool_output_1d)
my_maxpool_output = max_pool(my_activation_output, width=maxpool_size, stride=stride_size)
# --------Fully Connected--------def fully_connected(input_layer, num_outputs):
# First we find the needed shape of the multiplication weight matrix:# The dimension will be (length of input) by (num_outputs)
weight_shape = tf.squeeze(tf.stack([tf.shape(input_layer), [num_outputs]]))
# squeeze函数用于去掉维度为1的维度。保留数据。# Initialize such weight# 初始化weight
weight = tf.random_normal(weight_shape, stddev=0.1)
# Initialize the bias# 初始化bias
bias = tf.random_normal(shape=[num_outputs])
# Make the 1D input array into a 2D array for matrix multiplication# 将一维的数组添加一维成为2维数组
input_layer_2d = tf.expand_dims(input_layer, 0)
# Perform the matrix multiplication and add the bias
full_output = tf.add(tf.matmul(input_layer_2d, weight), bias)
# Get rid of extra dimensions# 去掉多余的维度只保留数据
full_output_1d = tf.squeeze(full_output)
return (full_output_1d)
my_full_output = fully_connected(my_maxpool_output, 5)
# Run graph# Initialize Variables
init = tf.global_variables_initializer()
sess.run(init)
feed_dict = {x_input_1d: data_1d}
print(‘>>>> 1D Data <<<<‘)
# Convolution Outputprint(‘Input = array of length %d‘%(x_input_1d.shape.as_list()[0])) # 25print(‘Convolution w/ filter, length = %d, stride size = %d, results in an array of length %d:‘%
(conv_size, stride_size, my_convolution_output.shape.as_list()[0])) # 21print(sess.run(my_convolution_output, feed_dict=feed_dict))
# Activation Outputprint(‘\nInput = above array of length %d‘%(my_convolution_output.shape.as_list()[0])) # 21print(‘ReLU element wise returns an array of length %d:‘%(my_activation_output.shape.as_list()[0])) # 21print(sess.run(my_activation_output, feed_dict=feed_dict))
# Max Pool Outputprint(‘\nInput = above array of length %d‘%(my_activation_output.shape.as_list()[0])) # 21print(‘MaxPool, window length = %d, stride size = %d, results in the array of length %d‘%
(maxpool_size, stride_size, my_maxpool_output.shape.as_list()[0])) # 17print(sess.run(my_maxpool_output, feed_dict=feed_dict))
# Fully Connected Outputprint(‘\nInput = above array of length %d‘%(my_maxpool_output.shape.as_list()[0])) # 17print(‘Fully connected layer on all 4 rows with %d outputs:‘%
(my_full_output.shape.as_list()[0])) # 5print(sess.run(my_full_output, feed_dict=feed_dict))
# >>>> 1D Data <<<<# Input = array of length 25# Convolution w/ filter, length = 5, stride size = 1, results in an array of length 21:# [-2.63576341 -1.11550486 -0.95571411 -1.69670296 -0.35699379 0.62266493# 4.43316031 2.01364899 1.33044648 -2.30629659 -0.82916248 -2.63594174# 0.76669347 -2.46465087 -2.2855041 1.49780679 1.6960566 1.48557389# -2.79799461 1.18149185 1.42146575]## Input = above array of length 21# ReLU element wise returns an array of length 21:# [ 0. 0. 0. 0. 0. 0.62266493# 4.43316031 2.01364899 1.33044648 0. 0. 0.# 0.76669347 0. 0. 1.49780679 1.6960566 1.48557389# 0. 1.18149185 1.42146575]## Input = above array of length 21# MaxPool, window length = 5, stride size = 1, results in the array of length 17# [ 0. 0.62266493 4.43316031 4.43316031 4.43316031 4.43316031# 4.43316031 2.01364899 1.33044648 0.76669347 0.76669347 1.49780679# 1.6960566 1.6960566 1.6960566 1.6960566 1.6960566 ]## Input = above array of length 17# Fully connected layer on all 4 rows with 5 outputs:# [ 1.71536088 -0.72340977 -1.22485089 -2.5412786 -0.16338299]
参考文献
TensorFlow机器学习实战指南
原文:https://www.cnblogs.com/cloud-ken/p/8425360.html
内容总结
以上是互联网集市为您收集整理的TensorflowTutorial_一维数据构造简单CNN全部内容,希望文章能够帮你解决TensorflowTutorial_一维数据构造简单CNN所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。