用TensorFlow2.0将手写数字集(MNIST)分为训练集,验证集和测试集(6:2:2),进行Tensorflow2的数据加载、多神经网络模型的搭建、分类模型的交叉验证、模型保存和新数据预测(自己手写一个数字到保存的模型中验证)
时间: 2023-06-13 17:07:11 浏览: 374
好的,我来给你讲解一下如何用TensorFlow2.0实现手写数字集(MNIST)的分类。
首先,我们需要下载MNIST数据集。可以使用TensorFlow自带的数据集加载函数进行下载,代码如下:
```python
import tensorflow as tf
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
```
这里我们将数据集分成了训练集和测试集。接下来,我们将训练集再分成训练集和验证集,比例为6:2:2,代码如下:
```python
# 将训练集分成训练集和验证集
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=42)
# 打印数据集大小
print("训练集大小:", x_train.shape)
print("验证集大小:", x_val.shape)
print("测试集大小:", x_test.shape)
```
接下来,我们需要对数据进行预处理,将像素值归一化到0到1之间,并将标签进行one-hot编码。代码如下:
```python
# 对数据进行预处理
x_train = x_train.astype('float32') / 255
x_val = x_val.astype('float32') / 255
x_test = x_test.astype('float32') / 255
# 对标签进行one-hot编码
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_val = tf.keras.utils.to_categorical(y_val, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)
```
接下来,我们需要搭建多神经网络模型。这里我们使用一个简单的全连接神经网络,代码如下:
```python
# 搭建神经网络模型
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
```
接下来,我们需要进行模型的编译和训练。这里我们使用交叉验证进行训练,代码如下:
```python
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
history = model.fit(x_train, y_train, validation_data=(x_val, y_val), epochs=10, batch_size=128)
```
训练完成后,我们可以对模型进行保存,代码如下:
```python
# 保存模型
model.save('my_model.h5')
```
最后,我们可以使用新数据对模型进行预测,代码如下:
```python
# 加载模型
new_model = tf.keras.models.load_model('my_model.h5')
# 对新数据进行预测
import numpy as np
new_data = np.random.rand(28, 28)
new_data = new_data.reshape((1, 28, 28))
pred = new_model.predict(new_data)
print(pred)
```
这里我们使用了随机生成的数据进行预测,你可以将它替换成自己手写的数字。
阅读全文