Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 卷积神经网络中图像的维数应该是多少_Image Processing_Tensorflow_Deep Learning_Keras - Fatal编程技术网

Image processing 卷积神经网络中图像的维数应该是多少

Image processing 卷积神经网络中图像的维数应该是多少,image-processing,tensorflow,deep-learning,keras,Image Processing,Tensorflow,Deep Learning,Keras,从初学者到深入学习 我正试图通过卫星图像(谷歌地图)识别普纳市的贫民窟。所以,在培训数据集中,我提供了大约100张贫民窟的图片和100张其他地区的图片。但是,即使准确率很高,我的模型也不能正确地对输入图像进行分类。 我想这可能是因为图像的尺寸。 我正在将所有图像的大小调整为128*128像素。 内核大小为3*3 链接到地图: 下面是代码 导入操作系统,cv2 导入glob 将numpy作为np导入 从keras.utils导入plot\u模型 从keras.utils.np\u utils导入

从初学者到深入学习

我正试图通过卫星图像(谷歌地图)识别普纳市的贫民窟。所以,在培训数据集中,我提供了大约100张贫民窟的图片和100张其他地区的图片。但是,即使准确率很高,我的模型也不能正确地对输入图像进行分类。 我想这可能是因为图像的尺寸。 我正在将所有图像的大小调整为128*128像素。 内核大小为3*3

链接到地图:

下面是代码

导入操作系统,cv2
导入glob
将numpy作为np导入
从keras.utils导入plot\u模型
从keras.utils.np\u utils导入到\u category
从sklearn.utils导入shuffle
从sklearn.model\u选择导入列车\u测试\u拆分
从keras.models导入模型
从keras.layers导入输入、卷积2D、MaxPoolig2D、展平、密集、衰减
PATH=os.getcwd()
data_path=path+'/dataset/*'
files=glob.glob(数据路径)
X=[]
对于文件中的myFiles:
image=cv2.imread(myFiles)
image_resize=cv2.resize(图像,(256,256))
X.append(图像大小)
image_data=np.数组(X)
image\u data=image\u data.astype('float32')
图像_数据/=255
打印(“图像数据形状”,图像数据形状)
没有类中的类=2
样本数量=图像数据。形状[0]
label=np.ones(无样本,dtype='int64')
标签[0:86]=0#贫民窟
标签[87:]=1#noSlum
Y=到_分类(标签,没有_类)
#洗牌数据集
x、 y=shuffle(图像数据,y,随机状态=2)
x_序列,x_测试,y_序列,y_测试=序列测试分割(x,y,测试大小=0.2,随机状态=2)
#打印(x_系列)
#打印(y_列)
输入\形状=图像\数据[0]。形状
输入=输入(输入形状)
conv_1=卷积2d(32,(3,3),padding='same',activation='relu')(输入)
conv_2=卷积2d(32,(3,3),填充='same',激活='relu')(conv_1)
pool_1=MaxPooling2D(pool_size=(2,2))(conv_2)
辍学1=辍学(0.5)(人才库1)
conv_3=卷积2d(64,(3,3),padding='same',activation='relu')(drop_1)
conv_4=卷积2d(64,(3,3),padding='same',activation='relu')(conv_3)
pool_2=MaxPooling2D(pool_size=(2,2))(conv_4)
辍学2=辍学(0.5)(人才库2)
展平1=展平()(下降2)
隐藏=密集(64,激活='relu')(平坦1)
drop_3=辍学(0.5)(隐藏)
out=密集(没有类,激活='softmax')(drop_3)
模型=模型(输入=输入,输出=输出)
compile(损失='categorical_crossentropy',优化器='rmsprop',度量=['accurity'])
模型拟合(x_序列,y_序列,批量大小=10,nb_历元=20,详细=1,验证_数据=(x_测试,y_测试))
model.save('model.h5')
分数=模型。评估(x_检验,y_检验,详细度=1)
打印('测试损失:',分数[0])
打印('测试精度:',分数[1])
测试图像=x测试[0:1]
打印(测试图像形状)
打印(模型预测(测试图像))

通常,您上面描述的行为类似于NN无法识别输入图像上的小对象。试想一下,你给出了一幅128*128的粗糙噪声图像,但什么也看不见——你想让NN正确地对对象进行分类吗

怎么办? 1) 尝试手动将数据集中的一些输入图像转换为128*128大小,看看您真正训练NN的数据是什么。因此,它将为您提供更多的洞察力-->也许您需要更好的图像尺寸

2) 添加更多的Conv层和更多的神经元,通过向输出函数添加更多的非线性,使您能够检测小而复杂的对象。谷歌这样伟大的神经网络结构,如ResNet

3) 添加更多的训练数据,100张图像不足以产生合适的结果

4) 同时添加数据增强技术(在您的案例中,轮换似乎非常强烈)


不要放弃:)最终,你会解决的。祝你好运

我会试试这些建议。看来需要一些严重的肘部润滑油。。非常感谢你。。!不客气。等待你的成功和成就。用更多的事实编辑你的帖子,肯定会有帮助。你是对的。。我意识到机器很难检测128*128维的特征。增加图像的维度和添加更多的训练数据对我来说很有用。但准确度不是很好。我想向数据集添加更多图像和增强应该会起作用。很高兴知道)当您获得更多数据并添加数据增强时,我相信您会成功:)P.S我通常使用512*512维或其周围。以及AWS上的1个批量大小和GPU。但这取决于数据,也许有些狗和猫的分类128*128是非常棒的。通常,使用opencv库手动检查图像在减少和增加尺寸时的外观是理解的关键