我正试图运行一个cnn模型,仅根据一个人的图像作为输入来预测人脸吸引力(数字输出(。我有一个文件夹,里面有每张脸的图片和评分数据库(1-7(。数据库是芝加哥人脸数据库和10k美国成人人脸数据库。然而,我正在努力运行它,我所发现的关于cnns的所有问题都是分类问题(用已经标记的数据集预测猫或狗(。由于CFD图像为2444*1718,我在读取图像时也有问题;不能分配大小为96.1Mb的矢量";。我有4gb RAM,使用64gui R,做了内存.limit(大小=56000(,甚至内存.limite(大小=556000(。在第二个大小上,我已经成功读取了130个图像(100个训练,30个测试(。提前谢谢。
编辑:看到姚翔的回答,我指定评分不仅是1,2,。。。,7,但因为这是12个人的平均分数,所以它们是小数:
memory.limit() ## Checking the set limit
[1] 4055
memory.limit(size=560000)
summary(CFDNEW_all_males$Attractive)
最小。第一个Qu中值平均值第三个Qu最大值。1.520 2.699 3.160 3.218 3.735 5.071
train_image_files_path <- "/Users/e-mashine/Documents/block 5/pictures cfd/training"
test_image_files_path <- "/Users/e-mashine/Documents/block 5/pictures cfd/testing"
train_files <- list.files(path = train_image_files_path, pattern = "*.jpg", full.names=TRUE)
test_files <- list.files(path = test_image_files_path, pattern = "*.jpg", full.names=TRUE)
train_cnn <- lapply(train_files[1:102], readImage) # if i try the whole train and test sets (305 and 102 images respectively) i get this error :
错误:无法分配大小为96.1 mb 的矢量
test_cnn <- lapply(test_files[1:31], readImage)
str(train_cnn)
102人名单$:带有2个插槽的正式类"Image"[包"EBImage"]….@.Data:num[1:2444,1:1718,1:3]11 11 11 11 1 1 1 1。。。….@colormode:int 2$:带有2个插槽的正式类"Image"[包"EBImage"]….@.Data:num[1:2444,1:1718,1:3]11 11 11 11 1 1 1 1。。。….@colormode:int 2$:带有2个插槽的正式类"Image"[包"EBImage"]….@.Data:num[1:2444,1:1718,1:3]11 11 11 11 1 1 1 1。。。….@colormode:int 2$:带有2个插槽的正式类"Image"[包"EBImage"]….@.Data:num[1:2444,1:1718,1:3]11 11 11 11 1 1 1 1。。。….@colormode:int 2
foreach(i=1:102) %do% {train_cnn[[i]] <- resize(train_cnn[[i]],150,150)}
{:任务1中的错误失败-"期望一个四维数组">
dim(train_cnn[[1]])
[1] 2444 1718 3
width(train_cnn[[1]])
[1] 2444
height(train_cnn[[1]])
[1] 1718
depth(train_cnn[[1]])
[1] 3
spectrum(train_cnn[[1]])
[1] NA
据我所知,它应该是2444宽,1718高,1深和3光谱,但我不知道为什么是这样。。。这可能是因为typeof(traincnn[[1](是双精度的而不是整数吗?
深度学习通常用于分类类型的问题,而不是回归。但这种能力是存在的(例如用于物体检测(。
你所要做的就是让你的最终输出变成S形。这将生成一个0,1的输出,互斥。然后将其缩放到范围(-0.5,6.5((***(,然后使用MSE损失。最终预测可以是标准的四舍五入操作。
(***(范围很重要。在其他设置中,可以将您的预测编码为0,1,2,。。。,6,因此将sigmoid缩放到范围(0.0,6.0(。但如果你这样做,模型将更难(事实上不可能(预测6类(你的第七类(。
你的内存问题很常见——可能不是特定的内存分配导致了问题,问题是之前的内存分配太大,可能是由于广播。只需打印出模型和张量的大小,直到找到有问题的张量。这可能是一个意外的广播,因为你改变了你的形状。