• 大小: 14.38MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-15
  • 语言: 其他
  • 标签: CNN+SVM  

资源简介

传统的卷积神经网络是利用全连接层进行分类,svm对于小样本数据具有较强的分类效果,利用SVM代替卷积神经网络中的全连接层,可以提高网络识别精度

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
“““
Created on Sat Oct 19 21:39:21 2019

@author: 华阳
“““
import random
import tensorflow as tf
import numpy as np
from libsvm.python.svmutil import *

train_data = np.load(“train_data.npy“)
train_label = np.load(“train_label.npy“)
test_data = np.load(“test_data.npy“)
test_label = np.load(“test_label.npy“)

train_data = train_data.reshape(15006400)
test_data = test_data.reshape(3006400)


sess = tf.InteractiveSession()
def weight_variable(shape):
    initial = tf.truncated_normal(shape stddev = 0.05)  #截断的正态分布,标准差stddev
    return tf.Variable(initial)
# 偏置参数初始化
def bias_variable(shape):
    initial = tf.constant(0.1 shape = shape)
    return tf.Variable(initial) 
# 定义卷积层
def conv2d(x W):
    # stride的四个参数:[batch height width channels] [batch_size image_rows image_cols number_of_colors]
    # height width就是图像的高度和宽度,batch和channels在卷积层中通常设为1
    return tf.nn.conv2d(x W strides = [1 1 1 1] padding = ‘SAME‘) 
def max_pool_2x2(x):
    return tf.nn.max_pool(x ksize = [1 2 2 1] strides = [1 2 2 1] padding = ‘SAME‘)

xs = tf.placeholder(tf.float32 [None 6400])
ys = tf.placeholder(tf.float32 [None 2])
keep_prob = tf.placeholder(tf.float32)

x_image = tf.reshape(xs [-1 80 80 1])#  -1 28 28 1

#print(x_image.shape)

# 卷积层一

# patch为5*5,in_size为1,即图像的厚度,如果是彩色,则为3,32是out_size,输出的大小-》32个卷积和(滤波器)

W_conv1 = weight_variable([9 9 1 32])
b_conv1 = bias_variable([32])
# ReLU操作,输出大小为28*28*32

h_conv1 = tf.nn.relu(conv2d(x_image W_conv1) + b_conv1)
# Pooling操作,输出大小为14*14*32
h_pool1 = max_pool_2x2(h_conv1)


# 卷积层二

# patch为5*5,in_size为32,即图像的厚度,64是out_size,输出的大小

W_conv2 = weight_variable([9 9 32 64])
b_conv2 = bias_variable([64])
# ReLU操作,输出大小为14*14*64
h_conv2 = tf.nn.relu(conv2d(h_pool1 W_conv2) + b_conv2)
# Pooling操作,输出大小为7*7*64
h_pool2 = max_pool_2x2(h_conv2)

 

# 全连接层一
W_fc1 = weight_variable([20 * 20 * 64 640])
b_fc1 = bias_variable([640])
# 输入数据变换
h_pool2_flat = tf.reshape(h_pool2 [-1 20 * 20 * 64])  #整形成m*n列n为7*7*64
# 进行全连接操作
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat W_fc1) + b_fc1)  # tf.matmul
# 防止过拟合,dropout
h_fc1_drop = tf.nn.dropout(h_fc1 keep_prob)


# 全连接层二
W_fc2 = weight_variable([640 2])
b_fc2 = bias_variable([2])

prediction = tf.nn.softmax(tf.matmul(h_fc1_drop W_fc2) + b_fc2)
# 计算loss
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(tf.clip_by_value(prediction1e-81.0))))
# 神经网络训练
train_step = tf.train.AdamOptimizer(0.0001).minimize(cross_entropy) #0.0001

# 定义Session
sess = tf.Session()

init = tf.global_variables_initializer()
# 执行初始化
sess.run(init)

for i in range(500):
    
        # 跑3000轮迭代,每次随机从训练样本中抽出50个进行训练
    batch = ([] [])
    p = random.sample(range(1500) 50)
    for k in p:
        batch[0].append(train_data[k])
        batch[1].append(train_label[k])
        
    sess.run(train_step feed_dict={xs: batch[0] ys: batch[1] keep_prob: 0.6})

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4595  2019-11-08 10:45  基于CNN+SVM的猫狗识别\CNN_SVM.py
     文件    76800128  2019-10-22 10:41  基于CNN+SVM的猫狗识别\train_data.npy
     文件       12128  2019-10-22 10:41  基于CNN+SVM的猫狗识别\train_label.npy
     文件     3840128  2019-10-23 12:29  基于CNN+SVM的猫狗识别\x_temp.npy
     文件      768128  2019-10-23 12:29  基于CNN+SVM的猫狗识别\x_temp2.npy
     文件         163  2019-11-08 10:50  基于CNN+SVM的猫狗识别\说明.txt
     目录           0  2020-10-12 16:31  基于CNN+SVM的猫狗识别\

评论

共有 条评论

相关资源