model = keras.Sequential() #32 个 3*3 的卷积核,relu 函数作为激活函数,步长为 1 model.add(tf.keras.layers.Conv2D(input_shape=x_train.shape[1:], filters=32, kernel_size=(3,3), strides=1, padding='same', activation='relu')) #2*2 大小的池化核 model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2))) #64 个 3*3 的卷积核 model.add(tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), strides=(1,1))) #平铺层 model.add(tf.keras.layers.Flatten()) #全连接层,隐藏层维度 32,激活函数 relua model.add(tf.keras.layers.Dense(32, activation='relu')) #全连接层,隐藏层维度 10,激活函数 softmax,输出每个分类的概率 model.add(tf.keras.layers.Dense(10, activation='softmax')) #优化器选择,优化器可以使用动态变化的学习率,使用更多的倒数信息改变权重,adam 和 # sgd 都是常用的优化器 Optimizer = optimizers.SGD(lr=0.001) model.compile(loss=keras.losses.categorical_crossentropy, optimizer=Optimizer, metrics=['accuracy']) model.summary() model.fit(x_train, y_train, batch_size=128, epochs=10, verbose=1) #通过测试集评估模型 score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) model.save('./final_model.h5')
时间: 2024-03-12 19:46:55 浏览: 124
keras:model.compile损失函数的用法
这是一个使用Keras构建卷积神经网络对MNIST数据集进行分类的示例代码。下面是代码的解释:
```python
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import optimizers
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# 将标签转换为one-hot编码
num_classes = 10
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# 构建卷积神经网络模型
model = keras.Sequential()
model.add(tf.keras.layers.Conv2D(input_shape=x_train.shape[1:], filters=32, kernel_size=(3,3), strides=1, padding='same', activation='relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))
model.add(tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3), strides=(1,1)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(32, activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
# 指定优化器和损失函数
optimizer = optimizers.SGD(lr=0.001)
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=optimizer, metrics=['accuracy'])
# 输出模型结构
model.summary()
# 训练模型
model.fit(x_train, y_train, batch_size=128, epochs=10, verbose=1)
# 评估模型
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
# 保存模型
model.save('./final_model.h5')
```
在上面的代码中,我们构建了一个包含两个卷积层和两个全连接层的卷积神经网络模型,其中卷积层使用的卷积核大小为3x3,激活函数为ReLU,池化层大小为2x2,全连接层的激活函数为ReLU和Softmax。我们使用了SGD作为优化器,学习率为0.001,并使用交叉熵作为损失函数。在训练过程中,我们使用了128个样本来进行批量梯度下降,训练10个epoch。最后,我们评估了模型在测试集上的性能,并保存了模型。
阅读全文