CNN 卷积神经网络TensorFlow简单实现
神经网络 实现 简单 Tensorflow 卷积 CNN
2023-09-14 09:15:50 时间
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 15 21:49:08 2018
@author: luogan
"""
import tensorflow as tf
from sklearn.datasets import load_digits
import numpy as np
digits = load_digits()
X_data = digits.data.astype(np.float32)
Y_data = digits.target.astype(np.float32).reshape(-1,1)
print (X_data.shape)
print (Y_data.shape)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_data = scaler.fit_transform(X_data)
from sklearn.preprocessing import OneHotEncoder
Y = OneHotEncoder().fit_transform(Y_data).todense() #one-hot编码
X = X_data.reshape(-1,8,8,1)
batch_size = 8 # 使用MBGD算法,设定batch_size为8
def generatebatch(X,Y,n_examples, batch_size):
for batch_i in range(n_examples // batch_size):
start = batch_i*batch_size
end = start + batch_size
batch_xs = X[start:end]
batch_ys = Y[start:end]
yield batch_xs, batch_ys # 生成每一个batch
tf.reset_default_graph()
# 输入层
tf_X = tf.placeholder(tf.float32,[None,8,8,1])
tf_Y = tf.placeholder(tf.float32,[None,10])
# 卷积层+激活层
conv_filter_w1 = tf.Variable(tf.random_normal([3, 3, 1, 10]))
conv_filter_b1 = tf.Variable(tf.random_normal([10]))
relu_feature_maps1 = tf.nn.relu(\
tf.nn.conv2d(tf_X, conv_filter_w1,strides=[1, 1, 1, 1], padding='SAME') + conv_filter_b1)
# 池化层
max_pool1 = tf.nn.max_pool(relu_feature_maps1,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
print (max_pool1)
conv_filter_w2 = tf.Variable(tf.random_normal([3, 3, 10, 5]))
conv_filter_b2 = tf.Variable(tf.random_normal([5]))
conv_out2 = tf.nn.conv2d(relu_feature_maps1, conv_filter_w2,strides=[1, 2, 2, 1], padding='SAME') + conv_filter_b2
print (conv_out2)
batch_mean, batch_var = tf.nn.moments(conv_out2, [0, 1, 2], keep_dims=True)
shift = tf.Variable(tf.zeros([5]))
scale = tf.Variable(tf.ones([5]))
epsilon = 1e-3
BN_out = tf.nn.batch_normalization(conv_out2, batch_mean, batch_var, shift, scale, epsilon)
print (BN_out)
relu_BN_maps2 = tf.nn.relu(BN_out)
max_pool2 = tf.nn.max_pool(relu_BN_maps2,ksize=[1,3,3,1],strides=[1,2,2,1],padding='SAME')
print (max_pool2)
max_pool2_flat = tf.reshape(max_pool2, [-1, 2*2*5])
# 全连接层
fc_w1 = tf.Variable(tf.random_normal([2*2*5,50]))
fc_b1 = tf.Variable(tf.random_normal([50]))
fc_out1 = tf.nn.relu(tf.matmul(max_pool2_flat, fc_w1) + fc_b1)
# 输出层
out_w1 = tf.Variable(tf.random_normal([50,10]))
out_b1 = tf.Variable(tf.random_normal([10]))
pred = tf.nn.softmax(tf.matmul(fc_out1,out_w1)+out_b1)
loss = -tf.reduce_mean(tf_Y*tf.log(tf.clip_by_value(pred,1e-11,1.0)))
train_step = tf.train.AdamOptimizer(1e-3).minimize(loss)
y_pred = tf.arg_max(pred,1)
bool_pred = tf.equal(tf.arg_max(tf_Y,1),y_pred)
accuracy = tf.reduce_mean(tf.cast(bool_pred,tf.float32)) # 准确率
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(1000): # 迭代1000个周期
for batch_xs,batch_ys in generatebatch(X,Y,Y.shape[0],batch_size): # 每个周期进行MBGD算法
sess.run(train_step,feed_dict={tf_X:batch_xs,tf_Y:batch_ys})
if(epoch%100==0):
res = sess.run(accuracy,feed_dict={tf_X:X,tf_Y:Y})
print (epoch,res)
res_ypred = y_pred.eval(feed_dict={tf_X:X,tf_Y:Y}).flatten() # 只能预测一批样本,不能预测一个样本
print (res_ypred)
from sklearn.metrics import accuracy_score
print accuracy_score(Y_data,res_ypred.reshape(-1,1))
相关文章
- 经典神经网络 | VGGNet 论文解析及代码实现
- 优达学城深度学习之五——卷积神经网络代码实现及实战演练
- 优达学城深度学习之六——TensorFlow实现卷积神经网络
- 【深度学习】卷积神经网络理解
- 神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)[通俗易懂]
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例
- 全连接神经网络的原理及Python实现
- 卷积神经网络常用模型_keras 卷积 循环 多分类
- 实现个神经网络的3D可视化,美爆了!
- 使用chatGPT搭建一个CNN卷积神经网络
- 神经网络 | 感知器原理及python代码实现and和or函数
- 【深度学习项目一】全连接神经网络实现mnist数字识别
- 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)
- PyTorch如何实现多层全连接神经网络
- 使用PyTorch实现简单的AlphaZero的算法(3):神经网络架构和自学习
- R语言豆瓣数据文本挖掘 神经网络、词云可视化和交叉验证
- 剑桥 | 《图神经网络几何图处理》,Chaitanya K. Joshi主讲,附视频与Slides
- 比9种SOTA GNN更强!谷歌大脑提出全新图神经网络GKATs
- WWW-2021最佳论文亚军花落天津大学:基于属性补全的异质图神经网络新架构
- CPU比GPU训练神经网络快十几倍,英特尔:别用矩阵运算了
- 用 PyTorch 实现基于字符的循环神经网络
- 手把手教你用 TensorFlow 实现卷积神经网络(附代码)
- 卷积神经网络不能处理“图”结构数据?这篇文章告诉你答案