关闭

《……自动标注》

212人阅读 评论(0) 收藏 举报

来自百度、谷歌搜索:


1、Softmax vs. Softmax-Loss: Numerical Stability

本文对这段文字The softmax loss layer computes the multinomial logistic loss of the softmax of its inputs. It’s conceptually identical to a softmax layer followed by a multinomial logistic loss layer, but provides a more numerically stable gradient.闲聊。中心思想是:在数值计算(或者任何其他工程领域)里,知道一个东西的基本算法和写出一个能在实际中工作得很好的程序之间还是有一段不小的距离的。

caffe 是一个很常用的 C++/CUDA 的 Deep Convolutional Neural Networks (CNNs) (深度卷积神经网络)的库。

经典的 Deep Neural Networks 顶层其实本来也就是一个 Logistic Regression (逻辑回归)分类器。

作用是将线性预测值转化为类别概率。

如果是在设计 Deep Neural Networks 的库,则可能会倾向于将两者分开来看待:因为 Deep Learning 的模型都是一层一层叠起来的结构,一个计算库的主要工作是提供各种各样的 layer,然后让用户可以选择通过不同的方式来对各种 layer 组合得到一个网络层级结构就可以了。比如用户可能最终目的就是得到各个类别的概率似然值,这个时候就只需要一个 Softmax Layer,而不一定要进行 Multinomial Logistic Loss 操作;或者是用户有通过其他什么方式已经得到了某种概率似然值,然后要做最大似然估计,此时则只需要后面的 Multinomial Logistic Loss 而不需要前面的 Softmax 操作。因此提供两个不同的 Layer 结构比只提供一个合在一起的 Softmax-Loss Layer 要灵活许多。

这里自然地就出现了一个问题:numerical stability(算法的数值稳定性实验

对于普通的神经网络,通常每一层进行的计算都是一个线性映射再经过一个 sigmoid 的非线性操作S,例如:

后面是写成向量/矩阵的形式,一般会显得更简洁。现在如果要对参数进行求导以计算它的 gradient 来进行 gradient descent (梯度下降算法)一类的参数优化,利用微积分里的 Chain Rule 链式法则可以得到如下的式子:


同样地,根据 Chain Rule 我们可以计算


计算出来的将会作为传递到层,整个过程就叫做 Back Propagation(反向传播),其实说白了就是 Chain Rule,只是涉及的符号有点多,容易搞混淆。


2TensorFlow学习笔记2:构建CNN模型

本文介绍介绍TensorFlow中模型的基本组成部分,同时将构建一个CNN(卷积神经网络)模型来对MNIST数据集中的数字手写体进行识别。

文中讲到MNIST手写体识别任务,”这个任务相当于是机器学习中的HelloWorld程序“。MNIST数据集一共包含三个部分:训练数据集(55,000份,mnist.train)、测试数据集(10,000份,mnist.test)和验证数据集(5,000份,mnist.validation)。一般来说,训练数据集是用来训练模型,验证数据集可以检验所训练出来的模型的正确性和是否过拟合,测试集是不可见的(相当于一个黑盒),但我们最终的目的是使得所训练出来的模型在测试集上的效果(这里是准确性)达到最佳。一张图片是一个28*28的像素点矩阵,我们可以用一个同大小的二维整数矩阵来表示。如下:


这里我们可以先简单地使用一个长度为28 * 28 = 784的一维数组来表示图像,因为下面仅仅使用softmax regression(Softmax回归)来对图片进行识别分类(尽管这样做会损失图片的二维空间信息,所以实际上最好的计算机视觉算法是会利用图片的二维信息的)。所以MNIST的训练数据集可以是一个形状为55000 * 784位的tensor,也就是一个多维数组,第一维表示图片的索引,第二维表示图片中像素的索引(”tensor”中的像素值在0到1之间)。

词向量的编码方式其实挺有讲究的。最简单的编码方式叫做one-hot vector:假设我们的词库总共有n个词,那我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0。词向量在这种类型的编码中如下图所示:图9991


在”Softmax Regression模型“部分讲到:

Softmax Regression是一个简单的模型,很适合用来处理得到一个待分类对象在多个类别上的概率分布。所以,这个模型通常是很多高级模型的最后一步。

Softmax Regression大致分为两步(暂时不知道如何合理翻译,转原话):
Step 1: add up the evidence of our input being in certain classes;
Step 2: convert that evidence into probabilities.

梯度下降是一个简单的计算方式,即使得变量值朝着减小代价函数值的方向变化。TensorFlow也提供了许多其他的优化算法,仅需要一行代码即可实现调用。

接下来,进行模型的训练。每一次的循环中,我们取训练数据中的100个随机数据,这种操作成为批处理(batch)。然后,每次运行train_step时,将之前所选择的数据,填充至所设置的占位符中,作为模型的输入。以上过程成为随机梯度下降,在这里使用它是非常合适的。因为它既能保证运行效率,也能一定程度上保证程序运行的正确性。(理论上,我们应该在每一次循环过程中,利用所有的训练数据来得到正确的梯度下降方向,但这样将非常耗时。)

怎样评价所训练出来的模型?显然,我们可以用图片预测类别的准确率。利用tf.argmax()函数来得到预测和实际的图片label值,再用一个tf.equal()函数来判断预测值和真实值是否一致。

文章给出了利用Softmax模型实现手写体识别的完整代码:

__author__ = 'chapter'

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print("Download Done!")

x = tf.placeholder(tf.float32, [None, 784])

# paras
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])

# loss func
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

# init
init = tf.initialize_all_variables()

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

# train
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.arg_max(y, 1), tf.arg_max(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

print("Accuarcy on Test-dataset: ", sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
同时,原文”将使用一个更加精巧的模型,一个简单的卷积神经网络模型(CNN)。这个模型能够达到99.2%的准确率,尽管这不是最高的,但已经足够接受了“。完整代码如下:

cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.initialize_all_variables())for i in range(20000):
  batch = mnist.train.next_batch(50)  if i%100 == 0:
    train_accuracy = accuracy.eval(feed_dict={        x:batch[0], y_: batch[1], keep_prob: 1.0})    print("step %d, training accuracy %g"%(i, train_accuracy))
  train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})print("test accuracy %g"%accuracy.eval(feed_dict={    x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))

最终,模型在测试集上的准确率大概为99.2%,性能上要优于之前的Softmax Regression模型。


3、Google Deep Learning Notes(TensorFlow教程)


TensorFlow 深度学习笔记 卷积神经网络


[04]tensorflow实现CNN


TensorFlow教程06:MNIST的CNN实现——源码和运行结果


TensorFlow的安装与CNN测试


TensorFlow CNN 测试CIFAR-10数据集


tensorflow学习笔记四 - 实现一个CNN网络


tensorflow-cnn


Tensorflow | CNN |卷积神经网络入门| MNIST


Tensorflow的CNN教程解析


[译]与TensorFlow的第一次接触(五)之多层神经网络


TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解


TensorFlow 03: MNIST and CNN(英文)


LSTM language model with CNN over characters in TensorFlow


vrv committed with tensorflower-gardener Merge changes from github






更多未完待续……


0
0
查看评论

图像自动标注 Automatic image annotation

翻译自https://en.wikipedia.org/wiki/Automatic_image_annotation。 见https://zh.wikipedia.org/wiki/图像自动标注。
  • LiJiancheng0614
  • LiJiancheng0614
  • 2016-02-17 23:28
  • 2446

Parker - 最高效的自动标注工具

http://www.cutterman.cn/zh/parker http://www.cutterman.cn/zh/parker
  • aicpzl
  • aicpzl
  • 2016-11-17 13:11
  • 1324

自动构建文本分类标注语料的方法

自动构建文本分类标注语料的方法基于搜索引擎构建 初始化 类别关键词库,人工补充部分关键词 对于 类别关键词库,利用搜索引擎系统,搜索各个关键词的相关网页,提取内容 清洗网页内容,并计算类别的关键词,人工check后,加入到 类别关键词 中 重复 执行2,3,直到获得相应的语料库 最后,人工check...
  • heisi_lai2
  • heisi_lai2
  • 2016-10-14 15:59
  • 701

通过主动学习的方法进行自动语料标注

目前正在做句子主干提取方面的工作,主要方法是构建二分类器,提取句子分词之后每个词的特征来决定分词的取舍。由于需要标注大量的训练语料,采用人工的方法费时费力,于是采用主动学习的方法实现语料标注,我实现的步骤如下: 1、先对语料实现人工标注一部分 2、使用机器学习训练模型如SVM、LR对已经标注的语料...
  • zhangxiaomin110
  • zhangxiaomin110
  • 2016-06-21 15:06
  • 1618

UG工程图自动标注工具 64位 版本无限制

UG工程图自动标注工具 64位 版本无限制
  • googleshanghai
  • googleshanghai
  • 2015-11-13 15:52
  • 1342

UI设计图的标注工具大比拼

一些标注工具的对比,因为坐的远,有的标注和切图设计也没给清楚,就不用再费劲的问了,自己解决了,今天写一写一些标注工具的对比。
  • zartzwj
  • zartzwj
  • 2016-12-15 14:42
  • 5252

基于多标签学习的图像语义自动标注

pg18  Carneiro等人[CCM07]将图像标注问题转化为有指导多类标注(supervised multiclass labeling)问题,在其方法中,为每个类学习一个类分布模型,在其标注过程中可为待标注图像同时进行多标签分类。 说明这种方法仍然采用的是二分的方式,对于每种类...
  • anlou
  • anlou
  • 2012-05-21 12:01
  • 1787

三十五、利用sonataadmin做样本标注

要想实现对新发现的公众号文章做自动分类,需要对样本做训练,而样本属于哪一类别是需要我们做人工标注的,直接操作数据库非常不方便,我想到了我们的网站后台管理系统,直接把样本数据整合进来就可以方便标注了 请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址 创建Crawl...
  • jiangjingxuan
  • jiangjingxuan
  • 2017-01-25 11:54
  • 320

百度地图自定义标注物+自动定位

百度地图API显示多个标注点带提示的代码 body { margin: 0; font-family: "Helvetica,Arial,FreeSans"; color: #000000; font-size: 12p...
  • dong_18383219470
  • dong_18383219470
  • 2017-01-08 10:51
  • 807

辅助Praat进行标注的工具

辅助Praat进行标注的工具,利用了sendpraat.exe。不需要通过Praat打开TextGrid和wav文件进行标注,直接使用这个工具,就可以自动读取,并且自动调用Praat进行标注,标注完成后,跳转到下一个文件时,刚才标注的文件已经保存了。
  • shaopengfei
  • shaopengfei
  • 2015-01-22 15:52
  • 4652
    个人资料
    • 访问:15268次
    • 积分:360
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:2篇
    • 译文:0篇
    • 评论:13条
    最新评论