神经网络_使用tensorflow对mnist手写数字分类
from pathlib import Path
import requests
import pickle
import gzip
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.utils import to_categorical
import pandas as pd
%matplotlib inline
1. 数据预处理
data_path = Path("data/mnist")
data_path.mkdir(parents=True, exist_ok=True)
#是否从网络下载数据文件
source_data_file_from_net = False
#下载数据
#此网址打开较慢,可以使用 https://tianchi.aliyun.com/dataset/165658 阿里云下载
mnist_url = "http://deeplearning.net/data/mnist/"
mnist_zip_name = "mnist.pkl.gz"
if source_data_file_from_net:
if not (data_path/mnist_zip_name).exists:
content = requests.get(mnist_url + mnist_zip_name).content
(data_path / mnist_zip_name).open('wb').write(content)
((x_train, y_train),(x_valid, y_valid), _) = pick.load(f, encoding='latin-1')
else:
with gzip.open((data_path / mnist_zip_name).as_posix(), "rb") as data_file:
((x_train, y_train),(x_valid, y_valid), _) = pick.load(data_file, encoding='latin-1')
else:
data_file = open('data/mnist/mnist.pkl', 'rb+')
((x_train, y_train),(x_valid, y_valid), _) = pickle.load(data_file, encoding='latin-1')
print("x_train shape ", x_train.shape)
print(x_train[:5])
print("y_train shape ", y_train.shape)
print(y_train[:5])
print("第一个数字5展示:")
plt.imshow(x_train[0].reshape((28,28)), cmap='gray')
x_train shape (50000, 784)
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]]
y_train shape (50000,)
[5 0 4 1 9]
第一个数字5展示:
<matplotlib.image.AxesImage at 0x207575478d0>
2.模型实现
2.1模型实现
#模型 api 参考 https://tensorflow.google.cn/api_docs/python/tf/keras
model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=tf.keras.optimizers.Adam(0.005),
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalCrossentropy])
model.fit(x_train, y_train, epochs=5, batch_size=64,
validation_data=(x_valid, y_valid))
data_file.close()
Epoch 1/5
[1m782/782[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m2s[0m 1ms/step - loss: 0.4966 - sparse_categorical_crossentropy: 0.4966 - val_loss: 0.1806 - val_sparse_categorical_crossentropy: 0.1806
Epoch 2/5
[1m782/782[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 1ms/step - loss: 0.1690 - sparse_categorical_crossentropy: 0.1690 - val_loss: 0.1906 - val_sparse_categorical_crossentropy: 0.1906
Epoch 3/5
[1m782/782[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 997us/step - loss: 0.1287 - sparse_categorical_crossentropy: 0.1287 - val_loss: 0.1682 - val_sparse_categorical_crossentropy: 0.1682
Epoch 4/5
[1m782/782[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 1ms/step - loss: 0.1103 - sparse_categorical_crossentropy: 0.1103 - val_loss: 0.1394 - val_sparse_categorical_crossentropy: 0.1394
Epoch 5/5
[1m782/782[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m1s[0m 1ms/step - loss: 0.1025 - sparse_categorical_crossentropy: 0.1025 - val_loss: 0.1345 - val_sparse_categorical_crossentropy: 0.1345
2.2模型优化
# 修改损失函数为CategoricalCrossentropy, 报错,还未解决
model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
data_file = open('data/mnist/mnist.pkl', 'rb+')
((x_train, y_train),(x_valid, y_valid), _) = pickle.load(data_file, encoding='latin-1')
model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.losses.CategoricalCrossentropy(),
metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
y_train = tf.keras.utils.to_categorical(y_train, num_classes=10)
y_valid = tf.keras.utils.to_categorical(y_valid, num_classes=10)
print("x_train.shape ", x_train.shape)
print("y_train.shape ", y_train.shape)
print("x_valid.shape ", x_valid.shape)
print("y_valid.shape ", y_valid.shape)
model.fit(x_train, y_train, epochs=5, batch_size=64,
validation_data=(x_valid, y_valid))
data_file.close()
x_train.shape (50000, 784)
y_train.shape (50000, 10)
x_valid.shape (10000, 784)
y_valid.shape (10000, 10)
Epoch 1/5
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
Cell In[63], line 18
16 print("x_valid.shape ", x_valid.shape)
17 print("y_valid.shape ", y_valid.shape)
---> 18 model.fit(x_train, y_train, epochs=5, batch_size=64,
19 validation_data=(x_valid, y_valid))
20 data_file.close()
File D:\python\Lib\site-packages\keras\src\utils\traceback_utils.py:122, in filter_traceback.<locals>.error_handler(*args, **kwargs)
119 filtered_tb = _process_traceback_frames(e.__traceback__)
120 # To get the full stack trace, call:
121 # `keras.config.disable_traceback_filtering()`
--> 122 raise e.with_traceback(filtered_tb) from None
123 finally:
124 del filtered_tb
File D:\python\Lib\site-packages\tensorflow\python\eager\execute.py:53, in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
51 try:
52 ctx.ensure_initialized()
---> 53 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
54 inputs, attrs, num_outputs)
55 except core._NotOkStatusException as e:
56 if name is not None:
InvalidArgumentError: Graph execution error:
Detected at node Equal defined at (most recent call last):
File "D:\python\Lib\runpy.py", line 198, in _run_module_as_main
File "D:\python\Lib\runpy.py", line 88, in _run_code
File "D:\python\Lib\site-packages\ipykernel_launcher.py", line 18, in <module>
File "D:\python\Lib\site-packages\traitlets\config\application.py", line 1043, in launch_instance
File "D:\python\Lib\site-packages\ipykernel\kernelapp.py", line 739, in start
File "D:\python\Lib\site-packages\tornado\platform\asyncio.py", line 205, in start
File "D:\python\Lib\asyncio\base_events.py", line 607, in run_forever
File "D:\python\Lib\asyncio\base_events.py", line 1919, in _run_once
File "D:\python\Lib\asyncio\events.py", line 80, in _run
File "D:\python\Lib\site-packages\ipykernel\kernelbase.py", line 545, in dispatch_queue
File "D:\python\Lib\site-packages\ipykernel\kernelbase.py", line 534, in process_one
File "D:\python\Lib\site-packages\ipykernel\kernelbase.py", line 437, in dispatch_shell
File "D:\python\Lib\site-packages\ipykernel\ipkernel.py", line 362, in execute_request
File "D:\python\Lib\site-packages\ipykernel\kernelbase.py", line 778, in execute_request
File "D:\python\Lib\site-packages\ipykernel\ipkernel.py", line 449, in do_execute
File "D:\python\Lib\site-packages\ipykernel\zmqshell.py", line 549, in run_cell
File "D:\python\Lib\site-packages\IPython\core\interactiveshell.py", line 2945, in run_cell
File "D:\python\Lib\site-packages\IPython\core\interactiveshell.py", line 3000, in _run_cell
File "D:\python\Lib\site-packages\IPython\core\async_helpers.py", line 129, in _pseudo_sync_runner
File "D:\python\Lib\site-packages\IPython\core\interactiveshell.py", line 3203, in run_cell_async
File "D:\python\Lib\site-packages\IPython\core\interactiveshell.py", line 3382, in run_ast_nodes
File "D:\python\Lib\site-packages\IPython\core\interactiveshell.py", line 3442, in run_code
File "C:\Users\AXZQ\AppData\Local\Temp\ipykernel_8960\1530222387.py", line 18, in <module>
File "D:\python\Lib\site-packages\keras\src\utils\traceback_utils.py", line 117, in error_handler
File "D:\python\Lib\site-packages\keras\src\backend\tensorflow\trainer.py", line 320, in fit
File "D:\python\Lib\site-packages\keras\src\backend\tensorflow\trainer.py", line 121, in one_step_on_iterator
File "D:\python\Lib\site-packages\keras\src\backend\tensorflow\trainer.py", line 108, in one_step_on_data
File "D:\python\Lib\site-packages\keras\src\backend\tensorflow\trainer.py", line 77, in train_step
File "D:\python\Lib\site-packages\keras\src\trainers\trainer.py", line 452, in compute_metrics
File "D:\python\Lib\site-packages\keras\src\trainers\compile_utils.py", line 330, in update_state
File "D:\python\Lib\site-packages\keras\src\trainers\compile_utils.py", line 17, in update_state
File "D:\python\Lib\site-packages\keras\src\metrics\reduction_metrics.py", line 204, in update_state
File "D:\python\Lib\site-packages\keras\src\metrics\accuracy_metrics.py", line 240, in sparse_categorical_accuracy
File "D:\python\Lib\site-packages\keras\src\ops\numpy.py", line 2355, in equal
File "D:\python\Lib\site-packages\keras\src\backend\tensorflow\numpy.py", line 1144, in equal
Incompatible shapes: [64,10] vs. [64]
[[{{node Equal}}]] [Op:__inference_one_step_on_iterator_69389]
原文地址:https://blog.csdn.net/feivirus/article/details/142302844
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!