胶囊网络Spread loss和accuracy_eval的理解2018-06-16

1、损失函数:

图片.png
import tensorflow as tf
from include.cifar_10_data import get_data_set
with tf.device('/cpu:0'):
    # 仅仅是为了观察运算过程,分别任意取cifar_10数据的10个标签当成label和activation
    images, labels = get_data_set(name="test")
    gg = tf.split(labels, num_or_size_splits=1000,axis=0)

##cifar的label有10000个,分成1000批,则每组数据有10个
    label =gg[33] #随机选第33组,共10个
    activation = gg[10] #随机选第10组,共10个

    # 开始观察
    sess=tf.Session()
    activations_shape = activation.get_shape().as_list()
    mask_t = tf.equal(label, 1)
    mask_i = tf.equal(label, 0)
    
    print('label:\r\n',sess.run(label))
    print('activation:\r\n',sess.run(activation))
    print('mask_t:\r\n',sess.run(mask_t))
    print('mask_i:\r\n',sess.run(mask_i))

    print('boolean_mask:\r\n', sess.run(tf.boolean_mask(activation, mask_t)))
    tf.boolean_mask(activation, mask_t)
    activations_t = tf.reshape(
      tf.boolean_mask(activation, mask_t), [activations_shape[0], 1]
    )

    activations_i = tf.reshape(
        tf.boolean_mask(activation, mask_i), [activations_shape[0], activations_shape[1] - 1]
    )
    margin =0.5  #取值0.5,后期加到0.9,loss将更加大
    print('activations_i:\r\n', sess.run(activations_i))
    print('activations_t:\r\n', sess.run(activations_t))
    print('activations_t - activations_i:\r\n', sess.run((activations_t - activations_i)))
    print('margin-(activations_t - activations_i):\r\n', sess.run(margin-(activations_t - activations_i)))

    print('tf.nn.relu(margin-(activations_t - activations_i)):\r\n', sess.run(tf.nn.relu(margin-(activations_t - activations_i))))
    print('tf.square:\r\n', sess.run(tf.square(
        tf.nn.relu(
          margin - (activations_t - activations_i)
        )
      )))
    print('tf.reduce_sum:\r\n', sess.run(tf.reduce_sum(
      tf.square(
        tf.nn.relu(
          margin - (activations_t - activations_i)
        )
      )
    )))

得到的运行结果:

label:
[[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]
activation:
[[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]
mask_t:
[[False True False False False False False False False False]
[False False False False False False False False False True]
[False False False True False False False False False False]
[False False False False False False True False False False]
[False False False False False False True False False False]
[False False False False False False False False False True]
[False False False True False False False False False False]
[False False False False False False False False True False]
[ True False False False False False False False False False]
[False False False False False False False True False False]]
mask_i:
[[ True False True True True True True True True True]
[ True True True True True True True True True False]
[ True True True False True True True True True True]
[ True True True True True True False True True True]
[ True True True True True True False True True True]
[ True True True True True True True True True False]
[ True True True False True True True True True True]
[ True True True True True True True True False True]
[False True True True True True True True True True]
[ True True True True True True True False True True]]
boolean_mask:
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 1.]
activations_i:
[[ 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
activations_t:
[[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 1.]
[ 0.]
[ 0.]
[ 1.]]
activations_t - activations_i:
[[ 0. 0. 0. -1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. -1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. -1. 0. 0. 0.]
[ 0. 0. 0. -1. 0. 0. 0. 0. 0.]
[ 0. -1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. -1. 0. 0. 0. 0. 0. 0. 0.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 0. 0. -1. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. -1. 0.]
[ 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
margin-(activations_t - activations_i):
[[ 0.5 0.5 0.5 1.5 0.5 0.5 0.5 0.5 0.5]
[ 0.5 0.5 0.5 0.5 0.5 1.5 0.5 0.5 0.5]
[ 0.5 0.5 0.5 0.5 0.5 1.5 0.5 0.5 0.5]
[ 0.5 0.5 0.5 1.5 0.5 0.5 0.5 0.5 0.5]
[ 0.5 1.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
[ 0.5 1.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
[-0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5]
[ 0.5 0.5 0.5 0.5 0.5 0.5 1.5 0.5 0.5]
[ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1.5 0.5]
[-0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5]]
tf.nn.relu(margin-(activations_t - activations_i)):
[[ 0.5 0.5 0.5 1.5 0.5 0.5 0.5 0.5 0.5]
[ 0.5 0.5 0.5 0.5 0.5 1.5 0.5 0.5 0.5]
[ 0.5 0.5 0.5 0.5 0.5 1.5 0.5 0.5 0.5]
[ 0.5 0.5 0.5 1.5 0.5 0.5 0.5 0.5 0.5]
[ 0.5 1.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
[ 0.5 1.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]
[ 0.5 0.5 0.5 0.5 0.5 0.5 1.5 0.5 0.5]
[ 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1.5 0.5]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]]
tf.square:
[[ 0.25 0.25 0.25 2.25 0.25 0.25 0.25 0.25 0.25]
[ 0.25 0.25 0.25 0.25 0.25 2.25 0.25 0.25 0.25]
[ 0.25 0.25 0.25 0.25 0.25 2.25 0.25 0.25 0.25]
[ 0.25 0.25 0.25 2.25 0.25 0.25 0.25 0.25 0.25]
[ 0.25 2.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25]
[ 0.25 2.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]
[ 0.25 0.25 0.25 0.25 0.25 0.25 2.25 0.25 0.25]
[ 0.25 0.25 0.25 0.25 0.25 0.25 0.25 2.25 0.25]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]]
tf.reduce_sum:
34.0
显然,有两个正确,每错一个则loss加4.25分

2、评估函数:accuracy_eval


def accuracy_eval(sess,logits,labels):

    predictions=sess.run(logits)
    print('predictions:\r\n',predictions)
    print('tf.argmax(predictions, 1):\r\n',sess.run( tf.argmax(predictions, 1)))

    print('labels:\r\n',sess.run(labels))
    print('tf.argmax(labels, 1):\r\n', sess.run(tf.argmax(labels, 1)))

    tf.equal(tf.argmax(predictions, 1), tf.argmax(labels, 1))

    true_or_false = tf.equal(tf.argmax(predictions, 1), tf.argmax(labels, 1))
    print('true_or_false:\r\n', sess.run(true_or_false))

    accuracy =tf.reduce_mean(tf.cast(true_or_false,tf.float32))
    print('accuracy:\r\n', sess.run(accuracy))

    return accuracy

输出结果:

predictions:
[[ 0.43357164 0.50969642 0.48628038 0.41604722 0.381396 0.37202153
0.40028509 0.52360743 0.33245403 0.59107369]
[ 0.56551605 0.54600668 0.38575536 0.28260168 0.38372964 0.32026786
0.423181 0.37484613 0.64745504 0.53001797]
[ 0.44975427 0.58631718 0.38979253 0.39016432 0.39017558 0.37531838
0.47394231 0.46395907 0.52134717 0.40106338]
[ 0.43395406 0.45158568 0.50714886 0.52360237 0.42100799 0.42440724
0.49690422 0.42216748 0.30997989 0.45479706]
[ 0.56510764 0.5565328 0.38620496 0.25996378 0.36804253 0.32081208
0.40408149 0.39643031 0.64207578 0.56647772]
[ 0.63262081 0.47189313 0.38610214 0.24103768 0.39650175 0.33255672
0.42739603 0.33855924 0.70086569 0.53474861]
[ 0.42177251 0.36542833 0.54296505 0.50520897 0.48850119 0.49256417
0.4874 0.49314392 0.30180061 0.35400492]
[ 0.46720546 0.59052932 0.38354144 0.35084662 0.39522159 0.36131698
0.45329645 0.46744886 0.55032516 0.42503142]
[ 0.50269079 0.33317381 0.57097989 0.46942753 0.53243518 0.43186834
0.56617087 0.3485783 0.38901323 0.311407 ]
[ 0.46945664 0.31061405 0.60182887 0.46262699 0.53712744 0.47861028
0.49903092 0.44854346 0.31332538 0.3362765 ]]
tf.argmax(predictions, 1):
[9 8 1 3 8 8 2 1 2 2]
labels:
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]]
tf.argmax(labels, 1):
[9 8 0 3 8 8 7 7 4 6]
true_or_false:
[ True True False True True True False False False False]
accuracy:
0.5
accuracy:
0.5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,695评论 0 3
  • TF API数学计算tf...... :math(1)刚开始先给一个运行实例。tf是基于图(Graph)的计算系统...
    MachineLP阅读 3,461评论 0 1
  • 一群人的电影 一群人的海 一群感受不到孤独的人 在汹涌的海浪边胡乱徘徊 所到之处都是一隅风景 你在脑海的冬在四处蔓...
    Rador3阅读 255评论 0 0
  • 听着天使的旋律 进入了甜美的梦乡 湛蓝的苍穹 掩起生活的忧伤 百合花给了殷切希望 晨羲和晚霞 映红了美丽的脸庞 高...
    吉羊玉奕v阅读 260评论 4 10
  • 今天看“《凶间雪山》里邓丽欣哭着说:每次对你说出我好想你都是憋了好久好久,憋到最后还是无法自我消化掉才说的。所以 ...
    Dqd_樊先森阅读 246评论 0 0