Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/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
Tensorflow 如何为不同的用途定制AlexNet_Tensorflow_Machine Learning_Keras_Regression_Conv Neural Network - Fatal编程技术网

Tensorflow 如何为不同的用途定制AlexNet

Tensorflow 如何为不同的用途定制AlexNet,tensorflow,machine-learning,keras,regression,conv-neural-network,Tensorflow,Machine Learning,Keras,Regression,Conv Neural Network,所以在过去的一周里,我一直在学习一些机器学习,我一直在胡闹我自己的回归CNN,输入彩色图像128x128,输出评级。虽然我的数据集很小,总共400个,但我通过稍微过度拟合(训练的平均绝对误差为0.5,用1-10标度进行测试的平均绝对误差为0.9)得到了不错的结果,模型如下所示: model=keras.Sequential([ Conv2D(32,内核大小=(5,5),步幅=(1,1),激活=(relu',输入形状=(128,128,3)), keras.层压降(0.15), MaxPoolig

所以在过去的一周里,我一直在学习一些机器学习,我一直在胡闹我自己的回归CNN,输入彩色图像128x128,输出评级。虽然我的数据集很小,总共400个,但我通过稍微过度拟合(训练的平均绝对误差为0.5,用1-10标度进行测试的平均绝对误差为0.9)得到了不错的结果,模型如下所示:

model=keras.Sequential([
Conv2D(32,内核大小=(5,5),步幅=(1,1),激活=(relu',输入形状=(128,128,3)),
keras.层压降(0.15),
MaxPoolig2D(池大小=(2,2),步幅=(2,2)),
Conv2D(64,内核大小=(5,5),激活='relu'),
keras.层压降(0.15),
keras.layers.MaxPoolig2D(池大小=(2,2)),
keras.layers.Flatten(),
keras.层.致密(1000,活化='relu'),
keras.层压降(0.4),
keras。层。致密(1)
])
然而,由于对结果不满意,我想尝试一些久经考验的真实模型。所以我用了AlexNet:

model=keras.Sequential([
Conv2D(filters=96,kernel_size=(11,11),strips=(4,4),activation='relu',input_shape=(128,128,3),padding='same'),
MaxPooling2D(池大小=(2,2),跨步=(2,2),填充=(相同),
Conv2D(filters=256,kernel_size=(11,11),strips=(1,1),activation='relu',padding='same'),
MaxPooling2D(池大小=(2,2),跨步=(2,2),填充=(相同),
Conv2D(filters=384,kernel_size=(3,3),strips=(1,1),activation='relu',padding='same'),
Conv2D(filters=384,kernel_size=(3,3),strips=(1,1),activation='relu',padding='same'),
Conv2D(filters=256,kernel_size=(3,3),strips=(1,1),activation='relu',padding='same'),
MaxPooling2D(池大小=(2,2),跨步=(2,2),填充=(相同),
keras.layers.Flatten(),
keras.层.致密(4096,活化='relu'),
keras.层压降(0.4),
keras.层.致密(4096,活化='relu'),
keras.层压降(0.4),
keras.层.致密(1000,活化='relu'),
keras.层压降(0.4),
keras。层。致密(1)
])

然而,它的收敛速度要慢得多,在MAE为1.2(列车)和0.9(试验)时几乎平稳。虽然这确实显示出较少的过度拟合,但我觉得奇怪的是,我仍然得到了相同的测试结果。我的AlexNet实现是否有缺陷,或者这不是AlexNet的正确应用程序。我知道它通常用于分类,但我认为它可能值得尝试回归。任何信息/建议/批评帮助,谢谢

我看不出您的AlexNet实现有任何明显的错误。但我想指出几点

第一个模型中使用的退出方式 在卷积输出之后应用
退出
不是一个标准。当您以这种方式应用退出时,
卷积
输出中的输出将随机关闭。但与全连接层不同,卷积输出具有“空间”结构。我想说的是,切换全通道比关闭随机神经元更有意义。我想一个例子会有帮助。想象一个通道输出对应于一个完全连接层的单个神经元(不是最好的类比,但它有助于理解我的建议)

或者,另一个选项是在卷积输出后去掉
辍学
,并且只有在完全连接层后才有
辍学

AlexNet收敛所需的时间 AlexNet比模型1大得多,这意味着比第一个模型的参数多得多。因此,花更长的时间来收敛是有道理的

为什么准确率低?
我能想到的一件事是
flant()
层之前的输出大小。在型号1中,它是32x32,在Alexnet中是4x4,非常小。因此,完全连接的层几乎没有来自卷积层的信息。这可能会导致AlexNet表现不佳(只是一种猜测)。

这太好了,谢谢!接下来的两个问题是,我是否应该更改AlexNet模型,使到完全连接层的输出为32x32或至少大于4x4?如果AlexNet向FC层提供的信息如此之少,为什么它在分类方面工作得如此出色?是的,我认为您应该向FC层发送更大的输出。关于第二个问题,你指的是哪项分类任务?如果是ImageNet,则原始输入为224x224x3。任务的类型可能也会受到影响。例如,你可以从一张16x16的图像(用你的眼睛)中将它分类为一只狗,但如果一道菜(食物)的评级为3或5,则很难回归