python - 具有掩蔽的深度卷积网络,正确的输入形状
问题描述
带掩码的卷积网络的最佳输入形状是什么,
我的意见
X = (nO.samples, 750, 3)
3 代表 xyz,因为我的数据是空间中连续点的链,每个点有 3 个特征,
y = (nO.samples, 750)
每个样本的长度为 750,即填充后的值,我使用了零填充,因此我想掩盖这些零,因为它们带有很多噪音(我认为):
input_shape = ( 748, 3)
model = Sequential(
[
#Input(shape = input_shape ),
Masking(mask_value= 0. ,input_shape=input_shape),
Conv2D(filters=16, kernel_size=(3,3), padding='same', activation = tf.nn.relu),
然后正如预期的那样,我得到了错误:
ValueError: Input 0 of layer conv2d_24 is incompatible with the layer: : expected
min_ndim=4, found ndim=3. Full shape received: [None, 748, 3]
遮罩后可以扩大尺寸吗?如果是这样,那么扩大哪一个
可不可能是X_train = np.expand_dims(X_train, 1)
或者可能X_train = np.expand_dims(X_train, -1)
导致(samples, 1, 750, 3) vs (samples, 750, 3, 1)
正如预期的那样,conv2d 层不接受掩码输入,不扩展暗淡,因为它是 3 dim ,而不是四个,
[None,750, 3]
对于 2dconv 输入,它是 [batch, in_height,in_width,in_channels]
我认为 in_height 应该设置为一个 <right?> 因为它是 1 行,
in_width 将是 750,并且在通道中 => 3?? 因为范围 (750) 中的每个点都有 3 个特征存储在一个数组中。
我没有尝试让网络知道它本身就是噪音,因为我认为训练需要很长时间。
这有什么意义吗?有没有人有任何暗示?
提前致谢。
解决方案
正如错误所说,Conv2D 需要 4D 的输入batch_shape + (channels, rows, cols)
输入形状应该是这样的(4, 28, 28, 3)
工作示例代码
import tensorflow as tf
input_shape = (4, 28, 28, 3)
x = tf.random.normal(input_shape)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Masking(mask_value=0.,
input_shape=input_shape))
model.add(tf.keras.layers.Conv2D(2, 3, activation='relu', input_shape=input_shape))
output = model(x)
推荐阅读
- python - 为什么没有正在运行的进程,却报错说“cuda out of memory”?
- windows - Github 自动添加 10,000 个系统文件到我的 github 更改中
- r - 有没有办法用数据框列中的 NULL 表达式替换“-”(包括括号“”)的字符值?
- python - python中有没有办法解压缩类似于javascript中的传播运算符的列表?
- python - 如何将符号 sympy ODE 系统转换为矩阵形式?
- python - 在python中旋转图像的最快方法是什么?
- .net - Chrome 未在 Gitlab 管道中使用 selenium 在 Windows Docker Image 中启动
- c# - WinForms:如何显示 Usb3 Vision 网络摄像头的输出
- excel - 将范围转换为表格
- c# - Web 服务长时间成本过程在客户端引发超时