keras 全连接手写识别 coursera week2
Exercise 2
In the course you learned how to do classificaiton using Fashion MNIST, a data set containing items of clothing. There’s another, similar dataset called MNIST which has items of handwriting – the digits 0 through 9.
Write an MNIST classifier that trains to 99% accuracy or above, and does it without a fixed number of epochs – i.e. you should stop training once you reach that level of accuracy.
Some notes:
- It should succeed in less than 10 epochs, so it is okay to change epochs= to 10, but nothing larger
- When it reaches 99% or greater it should print out the string “Reached 99% accuracy so cancelling training!”
- If you add any additional variables, make sure you use the same names as the ones used in the class
I’ve started the code for you below – how would you finish it?
1.全连接手写识别
import tensorflow as tf from os import path, getcwd, chdir # DO NOT CHANGE THE LINE BELOW. If you are developing in a local # environment, then grab mnist.npz from the Coursera Jupyter Notebook # and place it inside a local folder and edit the path to that location path = f"{getcwd()}/../tmp2/mnist.npz"# GRADED FUNCTION: train_mnist def train_mnist(): # Please write your code only where you are indicated. # please do not remove # model fitting inline comments. # YOUR CODE SHOULD START HERE **class myCallback(tf.keras.callbacks.Callback): def on_epoch_end(self,epoch,logs={}): if(logs.get("acc")>0.6): print("\nReached 60% accuracy so cancelling training!") self.model.stop_training=True** # YOUR CODE SHOULD END HERE mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data(path=path) # YOUR CODE SHOULD START HERE **callbacks=myCallback()** # YOUR CODE SHOULD END HERE model = tf.keras.models.Sequential([ # YOUR CODE SHOULD START HERE **tf.keras.layers.Flatten(input_shape=(28,28)), tf.keras.layers.Dense(512,activation='relu'), tf.keras.layers.Dense(10,activation='softmax')** # YOUR CODE SHOULD END HERE ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # model fitting history = model.fit(# YOUR CODE SHOULD START HERE **x_train,y_train,epochs=10,callbacks=[callbacks]** # YOUR CODE SHOULD END HERE ) # model fitting return history.epoch, history.history['acc'][-1]train_mnist()2.卷积手写识别
改几处地方就行了
首先 卷积要求图片是3维 mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data(path=path) x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1) x_test = x_test.reshape(x_test.shape[0], x_test.shape[1], x_test.shape[2], 1)改模型层 改为卷积 model = tf.keras.models.Sequential([ # YOUR CODE SHOULD START HERE # tf.keras.layers.Flatten(input_shape=(28,28)), # tf.keras.layers.Dense(512,activation='relu'), # tf.keras.layers.Dense(10,activation='softmax') tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(64,(3,3),activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(10,activation='softmax') # YOUR CODE SHOULD END HERE ])训练的时候加入测试集作为验证 history = model.fit(# YOUR CODE SHOULD START HERE x_train,y_train,epochs=10,callbacks=[callbacks], # YOUR CODE SHOULD END HERE validation_data=(x_test, y_test) )如果上面没有validation_data=(x_test, y_test),在 model.fit 外面加上 **test_loss = model.evaluate(x_test, y_test)** 也是可以验证的损失函数说明
如果你的 targets 是 one-hot 编码,用 categorical_crossentropy
one-hot 编码:[0, 0, 1], [1, 0, 0], [0, 1, 0]
如果你的 tagets 是 数字编码 ,用 sparse_categorical_crossentropy
数字编码:2, 0, 1
