首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像识别- Tensorflow

图像识别- Tensorflow
EN

Stack Overflow用户
提问于 2019-02-12 13:55:50
回答 1查看 186关注 0票数 0

我使用卷积神经网络(CNN)对30种不同的水果进行图像检测。我目前拥有的数据集由"train“和"test”文件夹组成,每个文件夹都有30个子目录,用于30个不同的类。

“培训”文件夹共有671个jpg文件,而"test“文件夹共有300个jpg文件。

我为实现图像检测而编写的Python代码如下所示-

代码语言:javascript
复制
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import matplotlib.pyplot as plt
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Flatten, Dropout
from keras.layers.convolutional import MaxPooling2D
from keras import backend as K
from sklearn.metrics import accuracy_score, precision_score, recall_score


# Read in images from 'train' folder-
train_datagen = ImageDataGenerator(
    rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
)

train_generator = train_datagen.flow_from_directory(
    directory=r"./train/", target_size=(420, 420), color_mode="rgb",
    batch_size=30, class_mode="categorical", shuffle=True
    )
# O/P-
# Found 671 images belonging to 30 classes.


# Read in images from 'test' folder-
test_datagen = ImageDataGenerator(
    rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True
)

valid_generator = test_datagen.flow_from_directory(
    directory=r"./test/", target_size=(420, 420), color_mode="rgb", batch_size=30,
    class_mode="categorical", shuffle=True
    )
# O/P-
# Found 300 images belonging to 30 classes.




# Dimensions of our image(s)-
img_width, img_height = 420, 420

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

print("\ninput_shape = {0}\n\n".format(input_shape))
# input_shape = (420, 420, 3)




# Build the CNN-

model = Sequential()

# model.add(Conv2D(32, (5, 5), input_shape = (32, 32, 3), activation = 'relu'))
model.add(Conv2D(32, (3, 3), input_shape = input_shape, activation = 'relu'))
# model.add(Conv2D(32, (3, 3), activation = 'relu'))
# model.add(Dense(40, activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
# model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(Conv2D(64, (3, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
# model.add(Dense(512, activation = 'relu'))
model.add(Dense(128, activation = 'relu'))
model.add(Dense(30, activation = 'softmax'))


# Compiling the model-
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics = ['accuracy'])


STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size

model.fit_generator(generator=train_generator, steps_per_epoch=STEP_SIZE_TRAIN, epochs=5)

当我试图执行这段代码时,我会收到以下消息-

使用TensorFlow后端。发现671幅图像,分属于30个类别。找到了属于30个类的300幅图像。

input_shape = (420,420,3)

纪元1/5 2019-02-12 14:48:18.088495: tensorflow/core/platform/cpu_feature_guard.cc:141]您的CPU支持以下指令: TensorFlow二进制文件未编译使用: AVX2 2019-02-12 14:48:23.270184: was /core/framework/allocator.cc:122]分配的670940160超过系统内存的10%。2019-02-12 14:48:31.747262: W/core/framework/allocator.cc:122]分配的670940160超过系统内存的10%。

在此之后,我的系统挂起,我必须重新启动系统。这种情况已经发生了4次。我的系统有Intel Core i5 @ 2.2 GHz,内存为8GB。

出什么问题了?

EN

回答 1

Stack Overflow用户

发布于 2019-05-31 06:12:26

尝试将batch_size属性降为1或2这样的小数字,然后执行

代码语言:javascript
复制
train_generator = data_generator.flow_from_directory(
    'path_to_the_training_set',
    target_size = (IMG_SIZE,IMG_SIZE),
    batch_size = 2,
    class_mode = 'categorical'
    )

请参阅下面的链接https://github.com/tensorflow/tensorflow/issues/18736

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54651679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档