"""
回答多选项问题,使用softmax函数,对数几率回归在多个可能不同值上的推广。
函数返回值是C个分量的概率向量,每个分量对应一个输出类别概率。
分量为概率,C个分量和始终为1。
每个样本必须属于某个输出类别,所有可能样本均被覆盖。
分量和小于1,存在隐藏类别;
分量和大于1,每个样本可能同时属于多个类别。
类别数量为2,输出概率与对数几率回归模型输出相同。

变量初始化,需要C个不同权值组,每个组对应一个可能输出,使用权值矩阵。
每行与输入特征对应,每列与输出类别对应。

鸢尾花数据集Iris,包含4个数据特征、3类可能输出,权值矩阵4X3。

训练样本每个输出类别损失相加。
训练样本期望类别为1,其他为0。
只有一个损失值被计入,度量模型为真实类别预测的概率可信度。
每个训练样本损失相加,得到训练集总损失值。
TensorFlow的softmax交叉熵函数:
sparse_softmax_cross_entropy_with_logits版本针对训练集每个样本只对应单个类别优化,
       softmax_cross_entropy_with_logits版本可使用包含每个样本属于每个类别的概率信息的训练集。
模型最终输出是单个类别值。

不需要每个类别都转换独立变量,需要把值转换为0~2整数(总类别数3)。
tf.stack创建张量,tf.equal把文件输入与每个可能值比较。tf.argmax找到张量值为真的位置。

推断过程计算测试样本属于每个类别概率。
tf.argmax函数选择预测输出值最大概率类别。
tf.equal与期望类别比较。
tf.reduce_meen计算准确率。

"""
import tensorflow as tf#导入TensorFlow库
import os#导入OS库
W = tf.Variable(tf.zeros([4, 3]), name="weights")#变量权值,矩阵,每个特征权值列对应一个输出类别
b = tf.Variable(tf.zeros([3], name="bias"))#模型偏置,每个偏置对应一个输出类别
def combine_inputs(X):#输入值合并
    print "function: combine_inputs"
    return tf.matmul(X, W) + b
def inference(X):#计算返回推断模型输出(数据X)
    print "function: inference"
    return tf.nn.softmax(combine_inputs(X))#调用softmax分类函数
def loss(X, Y):#计算损失(训练数据X及期望输出Y)
    print "function: loss"
    return tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=combine_inputs(X), labels=Y))#求平均值,针对每个样本只对应单个类别优化
def read_csv(batch_size, file_name, record_defaults):#从csv文件读取数据,加载解析,创建批次读取张量多行数据
    filename_queue = tf.train.string_input_producer([os.path.join(os.getcwd(), file_name)])reader = tf.TextLineReader(skip_header_lines=1)key, value = reader.read(filename_queue)decoded = tf.decode_csv(value, record_defaults=record_defaults)#字符串(文本行)转换到指定默认值张量列元组,为每列设置数据类型
    return tf.train.shuffle_batch(decoded, batch_size=batch_size, capacity=batch_size * 50, min_after_dequeue=batch_size)#读取文件,加载张量batch_size行
def inputs():#读取或生成训练数据X及期望输出Y
    print "function: inputs"
    #数据来源:https://archive.ics.uci.edu/ml/datasets/Iris
    #iris.data改为iris.csv,增加sepal_length, sepal_width, petal_length, petal_width, label字段行首行
    sepal_length, sepal_width, petal_length, petal_width, label =\read_csv(100, "iris.csv", [[0.0], [0.0], [0.0], [0.0], [""]])#转换属性数据
    label_number = tf.to_int32(tf.argmax(tf.to_int32(tf.stack([tf.equal(label, ["Iris-setosa"]),tf.equal(label, ["Iris-versicolor"]),tf.equal(label, ["Iris-virginica"])])), 0))#将类名称转抽象为从0开始的类别索引
    features = tf.transpose(tf.stack([sepal_length, sepal_width, petal_length, petal_width]))#特征装入矩阵,转置,每行一样本,每列一特征
    return features, label_number
def train(total_loss):#训练或调整模型参数(计算总损失)
    print "function: train"
    learning_rate = 0.01
    return tf.train.GradientDescentOptimizer(learning_rate).minimize(total_loss)
def evaluate(sess, X, Y):#评估训练模型
    print "function: evaluate"
    predicted = tf.cast(tf.arg_max(inference(X), 1), tf.int32)#选择预测输出值最大概率类别
    print sess.run(tf.reduce_mean(tf.cast(tf.equal(predicted, Y), tf.float32)))#统计所有正确预测样本数,除以批次样本总数,得到正确预测百分比
with tf.Session() as sess:#会话对象启动数据流图,搭建流程
    print "Session: start"
    tf.global_variables_initializer().run()X, Y = inputs()total_loss = loss(X, Y)train_op = train(total_loss)coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(sess=sess, coord=coord)training_steps = 1000#实际训练迭代次数
    for step in range(training_steps):#实际训练闭环
        sess.run([train_op])if step % 10 == 0:#查看训练过程损失递减
            print str(step)+ " loss: ", sess.run([total_loss])print str(training_steps) + " final loss: ", sess.run([total_loss])evaluate(sess, X, Y)#模型评估
    coord.request_stop()coord.join(threads)sess.close()

花谢花飞花满天,红消香断有谁怜?相关推荐

  1. 花谢飘飞花满天...

    花谢飘飞花满天 雨落成帘雨无眠 缘聚十月再相见 我羡鸳鸯不羡仙 --谙忆 转载请注明原文地址与作者笔名 原文地址: https://copyfuture.com/blogs-details/20191 ...

  2. 梦如繁花,无奈花开花谢花无常 伤感古典日志

    梦如繁花,无奈花开花谢花无常 伤感古典日志 - 梦如繁花,无奈花开花谢花无常 伤感古典日志 忆往昔,花香满怀念红颜 恨离别,一帘幽梦情缘浅 -题记 夜静花寒,忽尔的一些往昔浮现,映着逐渐消瘦的脸颊, ...

  3. 怎么修剪_夹竹桃怎么养?这样“修剪”一下,一年开3、4次花,花大色艳

    夹竹桃属于一种常绿灌木,一年四季叶子绿油油的,比较耐寒也比较耐炎热,夹竹桃一般都开粉红色花朵,但是也有红色的花儿也有白色的花儿,也有淡黄色的花色,它的花期在六到九月份. 夹竹桃能养在室内吗?1个种植小 ...

  4. 深圳六月有哪些公园能赏花 赏花打卡点推荐

    深圳真的是一年四季常绿,不管什么季节都能赏花,现在已经到六月天了,那么深圳六月有哪些公园能赏花呢?给大家推荐一些赏花打卡点吧! 深圳六月有哪些公园能赏花 赏花打卡点推荐 荷花 分布区域:分布于中国.日 ...

  5. 花开花落花非花、缘起缘灭缘随缘

    一个人,一条路,一片天. 仿佛整个世界就是自己,自己就是世界的全部!这不是孤傲,而是孤独! 走着走着...这个人突然发现原来这条路这片天原来不止他一个!原来还有形形色色的人,原来还有千奇百怪的事! 原 ...

  6. 19朵玫瑰花的花语-教你简单玫瑰花的折法

    19朵玫瑰花的花语-教你简单玫瑰花的折法 今天教大家一款折纸玫瑰束花的DIY方法,各位折纸达人可以根据不同的玫瑰花语需求折一粟送给心中的ta 但不同数量.有不同的喻意,所以送花时应对不同的数量含义区别 ...

  7. c语言加花指令,花指令的应用

    原标题:花指令的应用 对免杀的影响是非常大的,有效地利用花指令可以使免杀工作事半功倍,甚至单凭花指令就可以达到免杀的效果. 一.花指令在免杀领域的应用 1.花指令的应用技巧 在使用之前,首先我们应该明 ...

  8. c语言程序编写一朵花,一朵花(中英双语)

    一朵花 A Flower 作者|白鹤清泉(Baihe Qingquan) 英译|周柯楠(Zhou Kenan) 轻轻地走近你的世界 Gently I approach your world 默默地与你 ...

  9. java独步寻花,江畔独步寻花

    黄师塔前江水东,春光懒困倚微风. 桃花一簇开无主,可爱深红爱浅红? <江畔独步寻花>译文 黄师塔前江水向东流去,温暖的春天使人困倦,只想倚着春风小憩. 一株无主的桃花开得正盛,究竟是爱深红 ...

最新文章

  1. 命令行编译运行CSharp文件
  2. HTML5-WebSocket实现聊天室
  3. Avalonia跨平台入门第四篇之Popup在uos下问题
  4. 如何将商业第三方文物整合到您的Maven版本中
  5. set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h
  6. Android Palette颜色提取
  7. ajax 调用asp.net后台方法
  8. nginx(三)初步搭建nginx虚拟主机
  9. Java+opencv+mysql实现人脸识别源码(人脸采集入库+人脸识别相似度)
  10. 深入探索 Android 网络优化(三、网络优化篇)下
  11. 刘汝佳 《竞赛入门》5.2.2
  12. 电脑数据恢复软件推荐10款
  13. 物联网常用无线模块 接收灵敏度及发射功率简化测量方法
  14. P2P网贷行业的新征程
  15. 算法设计与分析之分治法
  16. 通过cv2.VideoCapture完成跳帧截取视频图片
  17. php判断显示器横屏还是竖屏,判断横屏竖屏(三种)
  18. windbg错误码汇总
  19. iVX低代码平台系列详解 -- 概述篇(一)
  20. 不同vlan间的通信--三层交换技术

热门文章

  1. Java中线程的学习(四)——线程的进阶应用(涉及锁、经典卖票案列)
  2. mac地址和ip地址、子网掩码和默认网关
  3. vue后台系统管理项目-菜单权限管理功能
  4. Python笔试题: 足球双循环赛制积分计算方法
  5. 搭建DNS服务器的那些知识
  6. mobi 第五项修炼_第五项修炼(套装共5册)epub+mobi+azw3_电子书_下载百度云PDF下载...
  7. 风雪一隅 php,一隅小角,遇见美好——自然角中的二三事
  8. 四支独立团队如何通过Kickstarter获得资金:第一部分
  9. echarts的边框图片之切图(重要)
  10. 天猫再出黑科技,大数据推彩瞳趋势定制