多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# R 中的 TF 估计器 API 我们在第 2 章中了解了 TensorFlow 估计器 API。在 R 中,此 API 使用 `tfestimator` R 包实现。 例如,我们提供了 MLP 模型的演练,用于在以下链接中对来自 MNIST 数据集的手写数字进行分类: [https://tensorflow.rstudio.com/tfestimators/articles/examples/mnist.html](https://tensorflow.rstudio.com/tfestimators/articles/examples/mnist.html) 。 您可以按照 Jupyter R 笔记本中的代码`ch-17b_TFE_Ttimator_in_R`。 1. 首先,加载库: ```r library(tensorflow) library(tfestimators) ``` 1. 定义超参数: ```r batch_size <- 128 n_classes <- 10 n_steps <- 100 ``` 1. 准备数据: ```r # initialize data directory data_dir <- "~/datasets/mnist" dir.create(data_dir, recursive = TRUE, showWarnings = FALSE) # download the MNIST data sets, and read them into R sources <- list( train = list( x = "https://storage.googleapis.com/cvdf-datasets/mnist/train-images-idx3-ubyte.gz", y = "https://storage.googleapis.com/cvdf-datasets/mnist/train-labels-idx1-ubyte.gz" ), test = list( x = "https://storage.googleapis.com/cvdf-datasets/mnist/t10k-images-idx3-ubyte.gz", y = "https://storage.googleapis.com/cvdf-datasets/mnist/t10k-labels-idx1-ubyte.gz" ) ) # read an MNIST file (encoded in IDX format) read_idx <- function(file) { # create binary connection to file conn <- gzfile(file, open = "rb") on.exit(close(conn), add = TRUE) # read the magic number as sequence of 4 bytes magic <- readBin(conn, what="raw", n=4, endian="big") ndims <- as.integer(magic[[4]]) # read the dimensions (32-bit integers) dims <- readBin(conn,what="integer",n=ndims,endian="big") # read the rest in as a raw vector data <- readBin(conn,what="raw",n=prod(dims),endian="big") # convert to an integer vecto converted <- as.integer(data) # return plain vector for 1-dim array if (length(dims) == 1) return(converted) # wrap 3D data into matrix matrix(converted,nrow=dims[1],ncol=prod(dims[-1]),byrow=TRUE) } mnist <- rapply(sources,classes="character",how ="list",function(url) { # download + extract the file at the URL target <- file.path(data_dir, basename(url)) if (!file.exists(target)) download.file(url, target) # read the IDX file read_idx(target) }) # convert training data intensities to 0-1 range mnist$train$x <- mnist$train$x / 255 mnist$test$x <- mnist$test$x / 255 ``` 从下载的 gzip 文件中读取数据,然后归一化以落入[0,1]范围。 1. 定义模型: ```r # construct a linear classifier classifier <- linear_classifier( feature_columns = feature_columns( column_numeric("x", shape = shape(784L)) ), n_classes = n_classes # 10 digits ) # construct an input function generator mnist_input_fn <- function(data, ...) { input_fn( data, response = "y", features = "x", batch_size = batch_size, ... ) } ``` 1. 训练模型: ```r train(classifier,input_fn=mnist_input_fn(mnist$train),steps=n_steps) ``` 1. 评估模型: ```r evaluate(classifier,input_fn=mnist_input_fn(mnist$test),steps=200) ``` 输出如下: ```r Evaluation completed after 79 steps but 200 steps was specified ``` | average_loss | 损失 | global_step | 准确性 | | --- | --- | --- | --- | | 0.35656 | 45.13418 | 100 | 0.9057 | 太酷!! 通过以下链接查找 R 中 TF 估计器的更多示例:[https://tensorflow.rstudio.com/tfestimators/articles/examples/ ](https://tensorflow.rstudio.com/tfestimators/articles/examples/) 有关`tensorflow` R 包的更多文档可以在以下链接中找到:[https://tensorflow.rstudio.com/tfestimators/reference/](https://tensorflow.rstudio.com/tfestimators/reference/)