使用tensorflow实现简单的多分类问题

请先观看用sklearn之逻辑回归 http://blog.csdn.net/daxiaofan/article/details/70154074
中间没有隐藏层,模拟一下逻辑回归

import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']   
plt.rcParams['font.family']='sans-serif' 
plt.rcParams['axes.unicode_minus'] = False

iris=load_iris()
iris_data=iris.data
iris_target=iris.target
import pandas as pd
iris_target1=pd.get_dummies(iris_target).values
print(iris_data.shape)

pca=PCA(n_components=2)

X=pca.fit_transform(iris_data)
print(X.shape)
f=plt.figure()
ax=f.add_subplot(111)
ax.plot(X[:,0][iris_target==0],X[:,1][iris_target==0],'bo')
ax.scatter(X[:,0][iris_target==1],X[:,1][iris_target==1],c='r')
ax.scatter(X[:,0][iris_target==2],X[:,1][iris_target==2],c='y')
ax.set_title('数据分布图')
plt.show()


x=tf.placeholder(dtype=tf.float32,shape=[None,2],name="input")
y=tf.placeholder(dtype=tf.float32,shape=[None,3],name="output")

w=tf.get_variable("weight",shape=[2,3],dtype=tf.float32,initializer=tf.truncated_normal_initializer(stddev=0.1))
bais=tf.get_variable("bais",shape=[3],dtype=tf.float32,initializer=tf.constant_initializer(0))
y_1=tf.nn.bias_add(tf.matmul(x,w),bais)

loss=tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=y_1))
x0min,x0max=X[:,0].min(),X[:,0].max()
x1min,x1max=X[:,1].min(),X[:,1].max()

with tf.Session() as sess:
    accuracy=tf.reduce_mean(tf.cast(tf.equal(tf.arg_max(y,1),tf.arg_max(y_1,1)),tf.float32))
    train_step=tf.train.AdamOptimizer().minimize(loss)
    my=tf.arg_max( y_1,1)
    sess.run(tf.global_variables_initializer())
    for i in range(3001):
        sess.run(train_step,feed_dict={x:X,y:iris_target1})
        if i%500==0:
            accuracy_print=sess.run(accuracy,feed_dict={x:X,y:iris_target1})
            print(accuracy_print)

    h=0.05
    xx,yy=np.meshgrid(np.arange(x0min-1,x0max+1,h),np.arange(x1min-1,x1max+1,h))
    x_=xx.reshape([xx.shape[0]*xx.shape[1],1])
    y_=yy.reshape([yy.shape[0]*yy.shape[1],1])
    test_x=np.c_[x_,y_]
    my_p=sess.run(my,feed_dict={x:test_x})
    coef=w.eval()
    intercept=bais.eval()
z=my_p.reshape(xx.shape)
f=plt.figure()
plt.contourf(xx,yy,z, cmap=plt.cm.Paired)
plt.axis('tight')
colors='bry'
for i,color in zip([0,1,2],colors):
    idx=np.where(iris_target==i)
    plt.scatter(X[idx,0],X[idx,1],c=color,cmap=plt.cm.Paired)

xmin,xmax=plt.xlim()

print(intercept)
print(coef)

plt.show()

这里写图片描述

这里写图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow是一个常用的深度学习框架,可以用于实现各种分类算法。在使用TensorFlow进行分类算法时,通常会使用MNIST数据集作为示例。MNIST数据集是一个手写数字的图像数据集,包含了60000个训练样本和10000个测试样本。使用TensorFlow可以方便地加载和处理这个数据集。 在TensorFlow中,可以使用以下代码加载MNIST数据集: ```python (x, y), (x_val, y_val) = datasets.mnist.load_data() ``` 这段代码会自动从网络上下载MNIST数据集,并将数据集分为训练集和测试集。其中,x是训练集的图像数据,y是对应的标签。可以通过对图像数据进行预处理,如缩放到-1~1的范围,并对标签进行one-hot编码。 接下来,可以使用TensorFlow的数据集对象`tf.data.Dataset`来构建训练集对象: ```python train_dataset = tf.data.Dataset.from_tensor_slices((x, y)) ``` 可以使用`batch`方法将训练集划分为批量进行训练: ```python train_dataset = train_dataset.batch(512) ``` 这样就可以得到一个批量大小为512的训练集对象,可以用于训练分类算法。 以上是使用TensorFlow进行分类算法的简单介绍,更详细的实现可以参考相关的文献和教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Tensorflow学习笔记:分类算法 Iris花分类](https://blog.csdn.net/AkashiLi/article/details/125600206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TensorFlow 2.0深度学习算法实战 第三章 分类问题](https://blog.csdn.net/weixin_35770067/article/details/108302454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[Python人工智能] 十.Tensorflow+Opencv实现CNN自定义图像分类案例及与机器学习KNN图像分类算法对比](https://blog.csdn.net/Eastmount/article/details/103757386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值