TensorFlow——实现时装分类问题

题目描述

近期老师布置了一个作业,实现服装分类问题,数据集在来自zalando Research。算法主要通过预测一张图片中的服装种类。在时装数据集中,共有60000张时装图片,每张图片表示一个28*28的像素灰度矩阵,并有一个标签,时装种类一共有10种。

数据集

数据集在网站或者《机器学习算法导论》github网站上可以找到,为方便,我已经将数据集放置在此,可以下载使用。

地址:https://download.csdn.net/download/m0_52945258/20024560?spm=1001.2014.3001.5501

代码实现

首先需要将数据集放在和这个python一个文件夹下

import pandas as pd
import tensorflow as tf
from matplotlib import pyplot as plt
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder
tf = tf.compat.v1
tf.disable_v2_behavior()
from sklearn.model_selection import train_test_split
import numpy as np

def get_data():
    df=pd.read_csv("./fashion-mnist_train.csv")
    y=df['label'].values
    df.drop(['label'],1,inplace=True)
    X=df.values
    return X,y

def process_feature(X):
    scaler=StandardScaler()
    X=scaler.fit_transform(X)
    scaler=MinMaxScaler(feature_range=(-1,1))
    X=scaler.fit_transform(X)
    return X



n_hidden1 = 300
n_hidden2 = 100
n_input = 28 * 28
n_class = 10

X = tf.placeholder(tf.float32, shape=(None, n_input))
y = tf.placeholder(tf.float32, shape=None)
hidden1 = tf.layers.dense(X, n_hidden1, activation=tf.nn.relu)  # 第一层
hidden2 = tf.layers.dense(hidden1, n_hidden2, activation=tf.nn.relu)  # 第二层
outputs = tf.layers.dense(hidden2, n_class)  # 第三层,默认使用的是identity函数作为激活函数
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=outputs)  # 计算交叉熵
loss = tf.reduce_mean(cross_entropy)  # 交叉熵取平均值作为最终函数
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(loss)  # 随机梯度下降算子
correct = tf.equal(tf.argmax(y, 1), tf.argmax(outputs, 1))
accuracy_score = tf.reduce_mean(tf.cast(correct, tf.float32))


with tf.Session() as sess:  # 计算图的开始
    tf.global_variables_initializer().run()
    X_data,y_data=get_data()
    encoder = OneHotEncoder()
    y_data = encoder.fit_transform(y_data.reshape(-1, 1)).toarray()
    X_train, X_test,y_train,y_test=train_test_split(X_data,y_data,test_size=0.5,random_state=0)
    X_train = process_feature(X_train)
    X_test = process_feature(X_test)

    for t in range(5000):  # 随机梯度下降算法
        i = np.random.randint(0, len(X_train))
        X_i = X_train[i].reshape(1, -1)
        y_i = y_train[i].reshape(1, -1)
        sess.run(train_op, feed_dict={X: X_i, y: y_i})
    accuracy = accuracy_score.eval(feed_dict={X: X_test, y: y_test})
    print("accuracy={}".format(accuracy))

一开始一直报错,折腾了挺久,结果通过和同学交流,发现是少了两句

    encoder = OneHotEncoder()
    y_data = encoder.fit_transform(y_data.reshape(-1, 1)).toarray()

忘了将其编码了,多元分类问题记着一定要编码(画超大的重点)

错误提醒如下所示:

 最终运行结果如下:

 由于用的模型较低级,因此准确率并不高,还有待提升,共同学习,共同学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值