我尝试在Keras中开发FCN-16模型。我用类似的FCN-16模型权重初始化权重。
def FCN8 (nClasses, input_height=256, input_width=256):
## input_height and width must be devisible by 32 because maxpooling with filter size = (2,2) is operated 5 times,
## which makes the input_height and width 2^5 = 32 times smaller
assert input_height % 32 == 0
assert input_width % 32 == 0
IMAGE_ORDERING = "channels_last"
img_input = Input(shape=(input_height, input_width, 3)) ## Assume 224,224,3
## Block 1
x = Conv2D(64, (3, 3), activation='relu', padding='same', name='conv1_1', data_format=IMAGE_ORDERING)(
img_input)
x = Conv2D(64, (3, 3), activation='relu', padding='same', name='conv1_2', data_format=IMAGE_ORDERING)(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool', data_format=IMAGE_ORDERING)(x)
f1 = x
# Block 2
x = Conv2D(128, (3, 3), activation='relu', padding='same', name='conv2_1', data_format=IMAGE_ORDERING)(x)
x = Conv2D(128, (3, 3), activation='relu', padding='same', name='conv2_2', data_format=IMAGE_ORDERING)(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool', data_format=IMAGE_ORDERING)(x)
f2 = x
# Block 3
x = Conv2D(256, (3, 3), activation='relu', padding='same', name='conv3_1', data_format=IMAGE_ORDERING)(x)
x = Conv2D(256, (3, 3), activation='relu', padding='same', name='conv3_2', data_format=IMAGE_ORDERING)(x)
x = Conv2D(256, (3, 3), activation='relu', padding='same', name='conv3_3', data_format=IMAGE_ORDERING)(x)
x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool', data_format=IMAGE_ORDERING)(x)
pool3 = x
# Block 4
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='conv4_1', data_format=IMAGE_ORDERING)(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='conv4_2', data_format=IMAGE_ORDERING)(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='conv4_3', data_format=IMAGE_ORDERING)(x)
pool4 = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool', data_format=IMAGE_ORDERING)(
x) ## (None, 14, 14, 512)
# Block 5
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='conv5_1', data_format=IMAGE_ORDERING)(pool4)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='conv5_2', data_format=IMAGE_ORDERING)(x)
x = Conv2D(512, (3, 3), activation='relu', padding='same', name='conv5_3', data_format=IMAGE_ORDERING)(x)
pool5 = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool', data_format=IMAGE_ORDERING)(
x)
n = 4096
o = (Conv2D(n, (7, 7), activation='relu', padding='same', name="fc6", data_format=IMAGE_ORDERING))(pool5)
conv7 = (Conv2D(n, (1, 1), activation='relu', padding='same', name="fc7", data_format=IMAGE_ORDERING))(o)
conv7 = (Conv2D(nClasses, (1, 1), activation='relu', padding='same', name="conv7_1", data_format=IMAGE_ORDERING))(conv7)
conv7_4 = Conv2DTranspose(nClasses, kernel_size=(2, 2), strides=(2, 2), data_format=IMAGE_ORDERING)(
conv7)
pool411 = (
Conv2D(nClasses, (1, 1), activation='relu', padding='same', name="pool4_11",use_bias=False, data_format=IMAGE_ORDERING))(pool4)
o = Add(name="add")([pool411, conv7_4])
o = Conv2DTranspose(nClasses, kernel_size=(16, 16), strides=(16, 16), use_bias=False, data_format=IMAGE_ORDERING)(o)
o = (Activation('softmax'))(o)
GDI= Model(img_input, o)
GDI.load_weights(Model_Weights_path)
model = Model(img_input, o)
return model
然后我做了训练,测试分割,并尝试运行模型:
from keras import optimizers
sgd = optimizers.SGD(lr=1E-2, momentum=0.91,decay=5**(-4), nesterov=True)
model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy'],)
hist1 = model.fit(X_train,y_train,validation_data=(X_test,y_test),batch_size=32,epochs=1000,verbose=2)
model.save("/content/drive/My Drive/HCI_prep/new.h5")
但这段代码在第一个epoch中抛出错误:
NotFoundError:找到2个根本错误。(0)未找到:算法无效!{{node pool4_11_3/Conv2D}}loss_4/穆尔/_629(1)Not found:算法无效!{{node pool4_11_3/Conv 2D}} 0次成功操作。忽略0个派生错误。
8条答案
按热度按时间55ooxyrt1#
在代码中添加以下内容:
然后重新启动Python内核。
pbgvytdp2#
有同样的问题。
MaxPooling的
padding='same'
不适合我。我将训练和测试生成器中的
color_mode
参数从'rgb'
更改为'grayscale'
,然后它对我有效。a64a0gku3#
这对我很有效:
zed5wv104#
在我的例子中,这是通过结束所有进程来解决的,这些进程仍然在其中一个GPU上分配内存。显然,其中一个没有完成(正确)。我不需要修改任何代码。
eufgjt7s5#
我的问题是,我调用了模型的input_shape(?28.第28章:你叫他什么?、28、28、3)。
f0ofjuux6#
作为参考,修复错误的完整代码如下:
s1ag04yj7#
这个错误是相当普遍的,基本上表明“某些东西”出错了。因为,各种各样的答案表明,错误可能是由于实现与keras/tensorflow的底层版本不兼容,或者过滤器大小不正确,或者......
没有单一的解决办法。对我来说,这也是一个输入形状的问题。而不是使用
rgb
使用grayscale
作为网络预期的1个通道。luaexgnf8#
就像@Soren说的,这个错误取决于各种情况。这可能是由于VRAM缺陷、v1和v2不兼容、调用
conv
或pool
时的形状问题等。在我的例子中,出现这个错误是因为我在Python 3.6(和TF 2.4.2)中调用保存的模型进行推理,而我的模型是在Python 3.10(和TF 2.8)中训练的,并且Keras/TF的函数API中完成的一些灵活的形状操作与旧版本的TF不向后兼容。
因此,我还建议检查您的训练和推理环境,以确保没有错误或不匹配。