Tensorflow 如何为任何一般数据集确定卷积神经网络的结构/架构?

Tensorflow 如何为任何一般数据集确定卷积神经网络的结构/架构?,tensorflow,neural-network,conv-neural-network,Tensorflow,Neural Network,Conv Neural Network,我知道CNN是如何工作的,包括每一层的用途(退出、共享等)。然而,在为新数据集设计CNN时,我不知道要使用多少Conv-Relu池层,在最终获得输出之前应该使用多少密集层,或者在每个卷积层中使用多少内核。我知道所有这些东西都是实验性的,设计CNN是不可能的,但是在设计CNN的时候,有没有什么经验法则可以让我记住呢? 还有,有没有一篇论文可以让我得到这些问题的答案 我试过用谷歌搜索所有这些问题,结果总是让我更加困惑 提前感谢您。您要做的最好的事情是使用已经被证明是有效的模型,我们称之为预训练模型

我知道CNN是如何工作的,包括每一层的用途(退出、共享等)。然而,在为新数据集设计CNN时,我不知道要使用多少Conv-Relu池层,在最终获得输出之前应该使用多少密集层,或者在每个卷积层中使用多少内核。我知道所有这些东西都是实验性的,设计CNN是不可能的,但是在设计CNN的时候,有没有什么经验法则可以让我记住呢? 还有,有没有一篇论文可以让我得到这些问题的答案

我试过用谷歌搜索所有这些问题,结果总是让我更加困惑


提前感谢您。

您要做的最好的事情是使用已经被证明是有效的模型,我们称之为预训练模型

一些预先训练过的CNN模型是
MobileNet
(tf.keras.applications.MobileNetV2),
VGGNET
tf.keras.applications.vgg19
tf.keras.applications.vgg16
),
ResNet
tf.keras.applications.resnet50
)等

ImageNet是一个拥有数百万条记录和数千个类的庞大数据集,上述模型在该数据上表现非常好,准确率超过90%

您所要做的就是使用转移学习重用这些模型,并通过将预先训练模型的输出层或两个密集层替换为特定于您的数据的输出层,使其适合您的数据。

使用花卉数据集的MobileNetV2模型的完整代码如下所示:

import tensorflow as tf
import datetime
import numpy as np
import os

tf.__version__ #'2.1.0'

URL = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"

zip_file = tf.keras.utils.get_file(origin= URL, 
                                   fname="flower_photos.tgz", 
                                   extract=True)

base_dir = os.path.join(os.path.dirname(zip_file), 'flower_photos')


# Create a DataGenerator
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(rescale=1. / 255, validation_split=0.2,
                             featurewise_center=True,
                             featurewise_std_normalization=True,
                             rotation_range=20,
                             width_shift_range=0.2,
                             height_shift_range=0.2,
                             horizontal_flip=True)

train_generator = datagen.flow_from_directory(
        base_dir,
        target_size=(224, 224),
        batch_size=32,
        subset = 'training',
        class_mode='categorical')

validation_generator = datagen.flow_from_directory(
        base_dir,
        target_size=(224, 224),
        batch_size=32,
        subset = 'validation',
        class_mode='categorical')

#Functional API
#Import MobileNet V2 with pre-trained weights AND exclude fully connected layers
IMG_SIZE = 224

from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras import Model


IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)

# Create the base model from the pre-trained model MobileNet V2
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
                                               include_top=False,
                                               weights='imagenet')

# Add Global Average Pooling Layer
x = base_model.output
x = GlobalAveragePooling2D()(x)

# Add a Output Layer
my_mobilenetv2_output = Dense(5, activation='softmax')(x)

# Combine whole Neural Network
my_mobilenetv2_model = Model(inputs=base_model.input, outputs=my_mobilenetv2_output)

my_mobilenetv2_model.compile(loss='categorical_crossentropy',
              optimizer= tf.keras.optimizers.RMSprop(lr=0.0001),
              metrics=['accuracy'])

my_mobilenetv2_model.summary()

我和你有同样的感觉这是我能想到的最令人烦恼的答案。不要介意不回答/销售的推销。这给人的印象是99%的ML社区不了解他们在做什么。它可能满足所有的编程人员,但对于真正的计算机科学家来说还不够好。是时候让谷歌学者做一些老式的文献评论了。