使用R语言搭建一个输入为784维,输出为10维的卷积神经网络
时间: 2023-06-20 21:09:23 浏览: 40
首先,需要安装并加载一些必要的 R 包,如下所示:
```r
install.packages("keras")
library(keras)
```
然后,我们可以使用 `keras_model_sequential()` 函数创建一个顺序模型,添加卷积、池化和全连接层,最终输出一个长度为10的向量。
```r
model <- keras_model_sequential()
# 添加第一个卷积层,包含32个卷积核,大小为3x3
model %>%
layer_conv_2d(filters = 32, kernel_size = c(3,3), activation = 'relu',
input_shape = c(28,28,1)) %>%
# 添加第一个最大池化层,池化窗口大小为2x2
layer_max_pooling_2d(pool_size = c(2,2)) %>%
# 添加第二个卷积层,包含64个卷积核,大小为3x3
layer_conv_2d(filters = 64, kernel_size = c(3,3), activation = 'relu') %>%
# 添加第二个最大池化层,池化窗口大小为2x2
layer_max_pooling_2d(pool_size = c(2,2)) %>%
# 将图像展平为一维向量
layer_flatten() %>%
# 添加一个全连接层,包含128个神经元
layer_dense(units = 128, activation = 'relu') %>%
# 添加一个输出层,包含10个神经元
layer_dense(units = 10, activation = 'softmax')
# 打印模型的结构信息
summary(model)
```
接下来,我们可以编译模型并训练它:
```r
# 编译模型,使用交叉熵损失函数和Adam优化器
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_adam(),
metrics = c('accuracy')
)
# 加载MNIST数据集
mnist <- dataset_mnist()
# 将数据集转换为卷积神经网络需要的格式
x_train <- mnist$train$x
x_train <- array_reshape(x_train, c(nrow(x_train), 28, 28, 1))
x_train <- x_train / 255
y_train <- to_categorical(mnist$train$y)
x_test <- mnist$test$x
x_test <- array_reshape(x_test, c(nrow(x_test), 28, 28, 1))
x_test <- x_test / 255
y_test <- to_categorical(mnist$test$y)
# 训练模型
history <- model %>% fit(
x_train, y_train,
epochs = 10, batch_size = 128,
validation_split = 0.2
)
# 在测试集上评估模型
model %>% evaluate(x_test, y_test)
```