美文网首页
2019-03-05深度学习——线性分类器LinearClass

2019-03-05深度学习——线性分类器LinearClass

作者: Hie_9e55 | 来源:发表于2019-03-05 21:33 被阅读0次

使用SVM Loss与Gradient Descent
先回顾一下整体步骤

  • 导入图片
  • 每一张图片进入分类器得到分数
  • 所得分数与该张图的正确标签得分协同计算svm_loss
  • 为了使svm_loss降低,对svm_loss的表达式进行求导得到梯度表达式(计算梯度的输入为loss与x)
  • 利用梯度表达式计算出当loss与x所对应的梯度
  • 更新权重矩阵
  • 权重矩阵 = 权重矩阵 - 步长 * 梯度
  • 用新的权重矩阵计算下一张图片

代码如下(暂时是这样的思路 ,后面仍会改进)

import numpy as np
import pickle
# 字符定义
# X 数据集(训练集与测试集)
# Y 标签集
# x 一个数据
# y 一个标签
# Ypred 预测标签集
# W 权重
# b 偏移
# dw 梯度
# learning_rate 步长
# scores 得分

# 超参数 
learning_rate = 0.01
# 迭代次数
times = 10

filename = 'xxxx'
filename_test = 'xxxx'

class LinearC:
    """docstring for NearestNeighbor"""
    def __init__(self):
        self.W = np.random.rand(10, 3072) * 0.001
        # self.b = np.zeros((10,1))

# 导入数据
    def load_file(self, filename):
        with open(filename, 'rb') as fo:
            data = pickle.load(fo, encoding='latin1')
        return data

# 计算梯度
    def evaluate_gradient(self, x, y):
        scores = self.W.dot(np.matrix(x).T) # + self.b
        # print(scores - scores[y] + 1)
        margins = np.maximum(0, scores - scores[y] + 1)
        margins[y] = 0
        
        self.loss.append(np.sum(margins))

        binary = margins
        binary[margins > 0] = 1
        binary[y] = -np.sum(binary)
        dW = binary * x
        return dW       

    def train(self, X, Y):
        for count in range(times):
            num = X.shape[0]
            self.loss = []
            for i in range(num):
                dW = self.evaluate_gradient(X[i], Y[i])
                self.W = self.W - learning_rate * dW

            # print(self.W)
            # square = 0
            # for i in range(self.W.shape[0]):
            #   for j in range(self.W.shape[1]):
            #       square += self.W[i,j] * self.W[i,j] 
            average_loss = np.sum(np.matrix(self.loss))/num
            print(average_loss)

# 使用模型进行预测,X是test集的数据
    def predict(self, X):
        num_test = X.shape[0]# test数据个数
        Ypred = np.zeros(num_test)# 初始化预测结果
        for i in range(num_test):
            scores = self.W.dot(np.matrix(X[i]).T) # + self.b
            Ypred[i] = np.argmax(scores)
        return Ypred

net = LinearC()

data = net.load_file(filename)
test_batch = net.load_file(filename_test)

net.train(data1['data'], data1['labels'])
result = net.predict(test_batch['data'])

print(result)

相关文章

  • 2019-03-05深度学习——线性分类器LinearClass

    使用SVM Loss与Gradient Descent先回顾一下整体步骤 导入图片 每一张图片进入分类器得到分数 ...

  • 图像分类-线性分类I

    深度神经网络 将所需的神经网络以类似乐高搭积木的方式进行组合,共同训练。 参数模型——线性分类器 线性分类器是参数...

  • 损失函数

    线性分类器简介 线性评分函数 阐明线性分类器 损失函数多分类SVMsoftmax分类器SVM和softmax的比较...

  • BAT机器学习面试1000题系列(第31~40题)

    31.线性分类器与非线性分类器的区别以及优劣如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则...

  • 2018 年大疆机器学习算法工程师春季提前批笔试题

    一、单项选择题 SVM 分类和深度学习分类B. SVM 只能应用于线性分类 错误,SVM 可以应用于线性分类和非线...

  • 机器学习与深度学习目录

    机器学习: 线性回归逻辑回归决策树贝叶斯分类随机森林集成算法支持向量机kmeans聚类k近邻算法 深度学习 感知器...

  • boosting和bagging

    深度学习158页中提到集成的平方误差的期望会随着集成的规模的增大而线性减小。 boosting是利用多个弱分类器,...

  • 机器学习笔记02-支持向量机SVM(上)

    目录 什么是SVM 线性分类器的含义 怎么找线性分类器 1.什么是SVM SVM支持向量机,号称机器学习的拦路虎。...

  • 基于sklearn的线性回归器

    理论 线性回归器 相比于线性分类器,线性回归器更加自然。回归任务的label是连续的变量(不像分类任务label是...

  • 统计机器学习-提升方法

    提升方法的思路就是学习多个分类器,对多个分类器进行线性组合,提高分类的性能。首先定义强可学习和弱可学习。如果存在一...

网友评论

      本文标题:2019-03-05深度学习——线性分类器LinearClass

      本文链接:https://www.haomeiwen.com/subject/ilsauqtx.html