由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 老年工程师关于神经网络一问
相关主题
请教C数组定义问题python的scope机制 非常垃圾
机器学习的分类:这两个算法有什么本质的不同?metric 不参与DL的具体优化吧?
C language的functoin-based reuse的问题(概念级的)register variable
用包子呼唤大牛们--问关于C++Destructor的问题lambda的一个疑问
Help!! variable scope ????sql 数据是存在哪里 (转载)
为什么要用templateRe: matlab: find main workspace variable
Bandit Algorithms for Website Optimizationcannot trace var values in vs2005
CNN transfer learning 为啥这么牛逼?[合集] 问个PHP+apache的问题 (转载)
相关话题的讨论汇总
话题: scope话题: hidden2话题: hidden1话题: vars话题: letter
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
假设是笔写数字识别的,我训练了400-25-10这样的三层(中间加了一层)。
那么,如果再训练一个字母的,假如是400-70-26个这样的。
那么,可以把两个网络合在一起吗?既可以识别数字,又可以识别字母?
变成400-95-36行吗?
L****8
发帖数: 3938
2
可以 需要把最后一两层重新训练

【在 b***i 的大作中提到】
: 假设是笔写数字识别的,我训练了400-25-10这样的三层(中间加了一层)。
: 那么,如果再训练一个字母的,假如是400-70-26个这样的。
: 那么,可以把两个网络合在一起吗?既可以识别数字,又可以识别字母?
: 变成400-95-36行吗?

s********k
发帖数: 6180
3
这个就是transfer learning吧,把400那层的输出当做embedding,直接用,下面怎么
改都可以

【在 b***i 的大作中提到】
: 假设是笔写数字识别的,我训练了400-25-10这样的三层(中间加了一层)。
: 那么,如果再训练一个字母的,假如是400-70-26个这样的。
: 那么,可以把两个网络合在一起吗?既可以识别数字,又可以识别字母?
: 变成400-95-36行吗?

s********k
发帖数: 6180
4
不过我觉得这个简单的累加25+70不太行,除非你不是全连接网络

【在 s********k 的大作中提到】
: 这个就是transfer learning吧,把400那层的输出当做embedding,直接用,下面怎么
: 改都可以

i********s
发帖数: 6
5
在Coursera上有神经网络的课程,是Andrew Ng讲课。里面好像说这样的识别可以最后
用一层softmax函数来识别
s********k
发帖数: 6180
6
softmax 是基本配置,但是不太明白楼主为什么要字母和数字分开training,可
以直接当做一个36类的softmax,否则就two stage来做先判断字母还是数字,在进一步
,不过网络结构没必要分别作

【在 i********s 的大作中提到】
: 在Coursera上有神经网络的课程,是Andrew Ng讲课。里面好像说这样的识别可以最后
: 用一层softmax函数来识别

b***i
发帖数: 3043
7
问题是已经训练好的26和10两个网络能否合并识别36个字符。

【在 s********k 的大作中提到】
: softmax 是基本配置,但是不太明白楼主为什么要字母和数字分开training,可
: 以直接当做一个36类的softmax,否则就two stage来做先判断字母还是数字,在进一步
: ,不过网络结构没必要分别作

s********k
发帖数: 6180
8
那你再在之前加一个binary 分类器吧,判别是字母还是数字,而不是像你这样涉及网络

【在 b***i 的大作中提到】
: 问题是已经训练好的26和10两个网络能否合并识别36个字符。
m****o
发帖数: 182
9
应该是可以的。transfer learning做起来稍微比较麻烦一点。下面的程序极有可能不
能跑通,我直接在网页上写出来的。但是你可以知道我的意思。只获取数字和字母模型
的隐含层信息,然后把两个的最后两层concat在一起和输出层做一个全联接。训练的时
候冻结所有隐含层的权值更新。这样的话你只是训练最后一层即输出层的权值,速度应
该会快很多。如果效果不理想,可以在输出层之前再加上一层银行层。
import tensorflow as tf
from tensorflow.contrib.layers import fully_connected,
n_in = 28 * 28 # assuming the size of mnist
n_out = 10 + 26 # 0-9 + 'a'-'z'
n_hidden = 100 # assuming both models have two hidden layers with size = 100
with tf.Graph().as_default():
X = tf.placeholder(tf.float32, shape=[None, n_in], name='X')
y = tf.placeholder(tf.int64, shape=[None], name='y')
with tf.name_scope('model.digit'): # assuming this is the name space for
the digit model
letter_hidden1 = fully_connected(X, n_hidden, activation_fn=tf.nn.elu,
name='hidden1')
letter_hidden2 = fully_connected(letter_hidden1, n_hidden, activation_fn
=tf.nn.elu, scope='hidden2')

with tf.name_scope('model.character'): # assuming this is the name space
for the character model
character_hidden1 = fully_connected(X, n_hidden, activation_fn=tf.nn.elu
, name='hidden1')
character_hidden2 = fully_connected(character_hidden1, n_hidden,
activation=tf.nn.elu, scope='hidden2')
with tf.name_scope('combined'):
logits = fully_connected(tf.concat(letter_hidden2, character_hidden2), n
_out, activation_fn=None, scope='output')
with tf.name_scope('loss'):
xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,
logits=logits)
loss = tf.reduce_mean(xentropy, name='loss')
train_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='
combined/output')
with tf.name_scope('train'):
optimizer = tf.train.GradientOptimizer(learning_rate=0.001)
train_op = optimizer.minimize(loss, var_list=train_vars)

letter_reuse_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
scope='model.digit/hidden[12]')
letter_saver = tf.train.Saver(dict([(var.name, var.name) for var in letter
_reuse_vars]))
char_reuse_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
scope='model.character/hidden[12]')
char_saver = tf.train.Saver(dict([(var.name, var.name) for var in char_
reuse_vars]))

saver = tf.train.Saver()
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
letter_saver.restore('./letter_dnn_model.ckpt')
char_saver.restore('./char_dnn_model.ckpt')
for epoch in range(100):
# get X_batch, y_batch from training data which is the mix of letters
and digits
sess.run(train_op, feed_dict={X:X_batch, y:y_batch})

saver.save(sess, 'combined_model.ckpt')


【在 b***i 的大作中提到】
: 假设是笔写数字识别的,我训练了400-25-10这样的三层(中间加了一层)。
: 那么,如果再训练一个字母的,假如是400-70-26个这样的。
: 那么,可以把两个网络合在一起吗?既可以识别数字,又可以识别字母?
: 变成400-95-36行吗?

1 (共1页)
进入Programming版参与讨论
相关主题
[合集] 问个PHP+apache的问题 (转载)Help!! variable scope ????
C++怎么写任意重重循环?为什么要用template
请问遇到如下情况怎么进行抽象Bandit Algorithms for Website Optimization
Perl:如何处理这种hash 结构,CNN transfer learning 为啥这么牛逼?
请教C数组定义问题python的scope机制 非常垃圾
机器学习的分类:这两个算法有什么本质的不同?metric 不参与DL的具体优化吧?
C language的functoin-based reuse的问题(概念级的)register variable
用包子呼唤大牛们--问关于C++Destructor的问题lambda的一个疑问
相关话题的讨论汇总
话题: scope话题: hidden2话题: hidden1话题: vars话题: letter