使用tensorflow2.0非重写方式,运用tensorflow2.0自带的keras建立卷积神经网络

直接上代码:
import tensorflow as tf

# 采取Sequential的方式
model = tf.keras.models.Sequential()
# 第一层卷积层采取32个3×3的卷积核,激活函数为relu,输入尺寸为28×28×1,池化层采用2×2的最大池化
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
# 第二层卷积层采取64个3×3的卷积核,激活函数为relu,池化层采用2×2的最大池化
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
# 第三层卷积层采取64个3×3的卷积核,激活函数为relu
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))

print(model.summary())

# 全连接层,首先是flatten展平,然后是两个全连接层分别神经元个数为64和10
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

# mnist手写数据集导入,reshape和归一化以及label变为one-hot编码
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

# 编译模型,优化器采用rmsprop,损失函数采用categorical_crossentropy
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# 导入输入数据,训练轮数为5,batch-size为64
model.fit(train_images, train_labels, epochs=5, batch_size=64)

# 测试集评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(test_acc)
运行结果如下:
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 26, 26, 32)        320       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 11, 11, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64)          0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 3, 3, 64)          36928     
=================================================================
Total params: 55,744
Trainable params: 55,744
Non-trainable params: 0
_________________________________________________________________
None
Train on 60000 samples
Epoch 1/5

   64/60000 [..............................] - ETA: 16:20 - loss: 2.2890 - accuracy: 0.0781
  192/60000 [..............................] - ETA: 5:45 - loss: 2.3111 - accuracy: 0.1406 
  384/60000 [..............................] - ETA: 3:04 - loss: 2.2594 - accuracy: 0.1771
  576/60000 [..............................] - ETA: 2:10 - loss: 2.2011 - accuracy: 0.2344
  704/60000 [..............................] - ETA: 1:51 - loss: 2.1641 - accuracy: 0.2656
  832/60000 [..............................] - ETA: 1:38 - loss: 2.1092 - accuracy: 0.2969
……
59392/60000 [============================>.] - ETA: 0s - loss: 0.0192 - accuracy: 0.9941
59520/60000 [============================>.] - ETA: 0s - loss: 0.0191 - accuracy: 0.9941
59648/60000 [============================>.] - ETA: 0s - loss: 0.0191 - accuracy: 0.9941
59776/60000 [============================>.] - ETA: 0s - loss: 0.0191 - accuracy: 0.9941
59904/60000 [============================>.] - ETA: 0s - loss: 0.0190 - accuracy: 0.9942
60000/60000 [==============================] - 29s 484us/sample - loss: 0.0191 - accuracy: 0.9941
10000/1 [==============================] - 1s 139us/sample - loss: 0.0170 - accuracy: 0.9910
0.991

Process finished with exit code 0
还有另一种写法:
import tensorflow as tf

model = tf.keras.models.Sequential([
    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.Conv2D(64, (3, 3), activation='relu'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

# mnist手写数据集导入,reshape和归一化以及label变为one-hot编码
mnist = tf.keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1))
test_images = test_images.astype('float32') / 255
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

# 编译模型,优化器采用rmsprop,损失函数采用categorical_crossentropy
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
# 导入输入数据,训练轮数为5,batch-size为64
model.fit(train_images, train_labels, epochs=5, batch_size=64)

# 测试集评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(test_acc)

你可能感兴趣的:(使用tensorflow2.0非重写方式,运用tensorflow2.0自带的keras建立卷积神经网络)