我一直在尝试在AWS Sagemaker上训练一个模型,因为我发现我的计算机不再足够强大,无法在合理的时间内训练我的模型。然而,当我试图加载模型(从我的计算机复制粘贴代码后),我得到了一个意想不到的错误。
经过一些修改,我发现第一个Conv2D图层的输出形状与我在电脑上的输出形状不同。
Sagemaker输出尺寸:
(None, 128, 498, 3)
期望输出尺寸:
(None, 498, 498, 3)
我的代码如下:
import tensorflow as tf
from tensorflow import keras
model = keras.models.Sequential()
model.add(keras.Input(shape = (500,500,3)))
model.add(keras.layers.Conv2D(filters=128, kernel_size = (3,3), activation='relu'))
model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.0001),
loss=keras.losses.CategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.summary()
我该如何解决这个问题?
我来这里,因为我有同样的问题。我找到了解决办法,但我还是很困惑。我只是想提一下,我在本地和sagemaker(2.10)上使用相同的tensorflow版本。并且在两个完全相同的代码上。
如果你去https://keras.io/api/layers/convolution_layers/convolution2d/州:
"输出型
4+D张量:batch_shape + (filters, new_rows, new_cols)if data_format='channels_first'如果data_format='channels_last',则使用batch_shape + (new_rows, new_cols, filters) 。行和颜色值可能因填充。">
而更改。所以我强迫Sagemaker的版本' data_format='channels_last'现在本地版本和AWS版本是一致的。
from keras import backend
backend.set_image_data_format('channels_last') #channels_first for NCHW
这可以解决您的问题,因为sagemaker上的tensorflow默认情况下期望通道优先