Tensorflow2.0 softmax多分类问题

现实生活中,二分类的问题毕竟还是少数,多分类的问题才是我们大部分时间会遇到的问题,下面我就以fashion_mnist为数据集,来看看多分类的问题。

import tensorflow as tf
from tensorflow import keras

#先下载数据集
(train_image , train_label),(test_image , test_label) = tf.keras.datasets.fashion_mnist.load_data()

#查看一下数据集的分类状况
print(train_label)

在这里插入图片描述

这里就可以看出来这是一个十分类的问题,所以我们接下来建立我们的model

#首先先将数据集归一化
train_image = train_image/255
test_image = test_image/255
#创建model
model = tf.keras.Sequential()
#添加隐含层
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
model.add(tf.keras.layers.Dense(128,activation = 'relu'))
model.add(tf.keras.layers.Dense(10,activation = 'softmax'))

#编译model
model.compile(optimizer = 'adam' , loss = 'sparse_categorical_crossentropy',metrics = ['acc'])

#训练model
model.fit(train_image , train_label,epochs = 5)
#进行model的预测
model.predict(test_image , test_label)

首先说明一下归一化的必要性,归一化可以使得隐藏层的输入数据分布大抵相同,可以更好的进行拟合,加速model的调参。
因为这边的数据集都是RGB的图像,范围都是[0,255],所以让他们都除以255,就可以完成归一化的操作。
接着可以看到,在隐藏层里面,我是先增加了一个Flatten层,他的作用是把2828的一个二维的像素点,压缩为一个2828的一维向量,把这个数据输送给全连接层(全连接层只能处理一维数据)。
在进行深度学习的时候,model的损失函数是一个重要的参数,一般来说,在进项回归问题和分类问题上,使用的损失函数是不一样的。一般来说,回归问题上,损失函数都是mse,而二分类的问题上,一般我们都选取binary_crossentropy的交叉熵损失函数,在softmax问题上,一般会有sparse_categorical_crossentropy和categorical_crossentropy来计算交叉熵,如果是一般的数据是顺序编码的时候,我们会使用sparse_categorical_crossentropy,如果是one-hot编码的时候,我们会使用categorical_crossentropy来计算softmax的交叉熵。
在这里插入图片描述
这是训练的正确率,大约可以到89%
在这里插入图片描述
最后测试的数据集,正确率也差不多可以到达9成左右,如果训练的epochs更多的话,这个正确率还是可以提高的。

### 回答1: 要在TensorFlow 2.中运行1.代码,您需要使用TensorFlow 1.x兼容性模块。这个模块可以让您在TensorFlow 2.中使用1.代码,但是您需要注意一些细节,例如变量初始化和话管理。您可以使用以下代码导入兼容性模块: ``` import tensorflow.compat.v1 as tf tf.disable_v2_behavior() ``` 然后,您可以使用1.代码,例如: ``` x = tf.placeholder(tf.float32, shape=[None, 784]) W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) y = tf.nn.softmax(tf.matmul(x, W) + b) ``` 请注意,您需要使用`tf.Session()`来运行计算图: ``` with tf.Session() as sess: sess.run(tf.global_variables_initializer()) result = sess.run(y, feed_dict={x: input_data}) ``` 希望这可以帮助您在TensorFlow 2.中运行1.代码。 ### 回答2: 在TensorFlow 2.0中运行1.0版本的代码有一些注意事项。由于TensorFlow 2.0是向后兼容的,可以运行1.0版本的代码,但需要进行一些修改。TensorFlow 2.0默认使用了eager execution(即即时执行)模式,而1.0版本默认使用了静态图模式。以下是几个需要注意的地方: 1. 导入库:在TensorFlow 2.0中,需要使用`import tensorflow.compat.v1 as tf`来导入1.0版本的tensorflow库。这样可以确保使用1.0版本的API和函数。 2. 静态图模式:TensorFlow 2.0的默认模式是即时执行模式(eager execution),如果想要使用1.0版本的静态图模式,需要使用`tf.compat.v1.disable_eager_execution()`来禁用即时执行。 3. placeholder:在TensorFlow 2.0中,`tf.placeholder`已经被移除了。可以使用`tf.compat.v1.placeholder`来代替。 4. Session:在TensorFlow 2.0中,可以直接运行张量,不再需要Session。如果代码中有`Session`相关的操作,需要将其修改为直接执行相应的操作。 5. 变量声明:在TensorFlow 2.0中,`tf.Variable`的默认行为有一些变化。如果想要使用1.0版本的变量声明行为,可以使用`tf.compat.v1.Variable`来代替。 需要注意的是,并非所有1.0版本的代码都可以无修改地在2.0版本上运行,特别是那些使用了一些被废弃的API和函数的代码。因此,在运行1.0版本的代码时,需要根据代码的具体情况进行相应的修改和调整,以确保代码在TensorFlow 2.0上能够正常运行。 ### 回答3: TensorFlow 2.0是相对于早期版本的重大升级,其中包含了许多新特性和改进。因此,如果要在TensorFlow 2.0中运行1.0的代码,可能遇到一些兼容性问题。以下是一些可能需要处理的问题: 1. 语法差异:TensorFlow 2.0对许多API进行了重大的修改和重命名。因此,1.0版本的代码可能包含已被弃用或删除的函数和参数。需要修改代码以适应新的API。 2. Eager Execution:TensorFlow 2.0默认启用了Eager Execution,这是一个即时执行模式。而1.0版本默认使用的是图计算模式。因此,在运行1.0代码时,可能需要禁用Eager Execution或者修改代码以适应新的执行模式。 3. Keras集成:TensorFlow 2.0将Keras作为其主要的高级API。因此,如果1.0代码使用了其他的高级API,可能需要将其转换为Keras的形式,并使用新的Keras API进行模型构建和训练。 4. 数据集处理:TensorFlow 2.0引入了tf.data API,用于高效处理和预处理数据集。1.0版本中的代码可能使用了不同的数据处理方式,需要修改以适应新的API。 总之,将1.0代码迁移到TensorFlow 2.0需要根据具体的代码进行相应的调整和修改,以适应新版本的语法和功能。但是,由于TensorFlow团队一直致力于保持向后兼容性,因此许多代码可以在2.0版本中无修改地继续运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值