MNIST数据包含785列,第一列是标签,其余列是像素。
我想通过平均图像中每个4x4子空间中的灰度来将每个图像的尺寸减小到7x7。
我该如何实现?
样本数据:
label v1 v2 v3....v784
1 0 0 13 100
3 9 0 200 0
答案 0 :(得分:0)
library(tensorflow)
datasets <- tf$contrib$learn$datasets
mnist <- datasets$mnist$read_data_sets("MNIST-data", one_hot = TRUE)
img <- matrix(mnist$train$images[1, ], 28, 28)
avg <- function(x) {
output <- c()
for (i in 0:(length(x)/4-1)){
output <- c(output, mean(x[(1 + 4 * i):(4 * i + 4)]))
}
return(output)
}
img <- apply(img, 2, avg)
img <- apply(img, 1, avg)
print(img)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#[1,] 0.000000 0.00000000 0.000000000 0.00000000 0.0000000 0.00000000 0
#[2,] 0.000000 0.00000000 0.023774512 0.08627452 0.0000000 0.00000000 0
#[3,] 0.264951 0.65612750 0.596078470 0.56985298 0.6960785 0.03333334 0
#[4,] 0.000000 0.00000000 0.006127452 0.19632354 0.7279412 0.30784316 0
#[5,] 0.000000 0.19411766 0.595833369 0.49632356 0.6409314 0.31446080 0
#[6,] 0.000000 0.03480392 0.000000000 0.00000000 0.7100491 0.05465687 0
#[7,] 0.000000 0.00000000 0.000000000 0.10318628 0.2573530 0.00000000 0
答案 1 :(得分:0)
##img_dataset is MNIST rowmajor like image dataset
##nrow and ncol of images should be dividable by "windowsize"
apply_mean_filter <- function(img_dataset,image_x_y_size=28,windowsize=4,mc.cores=1){
require(parallel)
mclapply(1:nrow(img_dataset),function(img_idx){temp_data_mat <- matrix(img_dataset[img_idx,],ncol=image_x_y_size,nrow=image_x_y_size);return(sapply(0:((image_x_y_size/windowsize)-1), function(x) sapply(0:((image_x_y_size/windowsize)-1), function(y) mean(temp_data_mat[(x*windowsize+1):((x+1)*windowsize),(y*windowsize+1):((y+1)*windowsize)]))))},mc.cores=mc.cores)
}
MNIST <- as.matrix(train$x)#MNIST without labels
mean_MNIST_list <-
apply_mean_filter(MNIST,image_x_y_size=28,windowsize=4,mc.cores=2) ##return list of filterd image