이 문제는 오래 동안 존재하는 것으로 보이며 많은 사용자가이 문제에 직면 해 있습니다.tensorflow 0 일괄 처리 크기에 GPU가 충돌 함 CUDNN_STATUS_BAD_PARAM
stream_executor/쿠다/cuda_dnn.cc : 444] BatchDescriptor 변환 할 수 {개수 : 0 feature_map_count 64 공간적 7 264 value_min : 0.000000 value_max : 0.000000 레이아웃 : BatchDepthYX} t O cudnn 텐서 설명 : CUDNN_STATUS_BAD_PARAM
메시지가 너무 신비 스럽기 때문에 코드에서 무슨 일이 일어 났는지 알지 못하지만 코드는 CPU 텐서 흐름에서 잘 작동합니다.
우리는 tf.cond를 사용하여이 문제를 해결할 수 있다고 들었지만 tensorflow-gpu에 익숙하지 않아 누군가 나를 도와 줄 수 있습니까? 내 코드는 Keras를 사용하고 입력과 같이 생성기를 사용합니다. 이는 메모리 부족 문제를 피하기위한 것입니다. 생성기는 일부 일괄 처리 크기로 데이터를 내보내는 True 루프에 의해 만들어집니다.
def resnet_model(bin_multiple):
#input and reshape
inputs = Input(shape=input_shape)
reshape = Reshape(input_shape_channels)(inputs)
#normal convnet layer (have to do one initially to get 64 channels)
conv = Conv2D(64,(1,bin_multiple*note_range),padding="same",activation='relu')(reshape)
pool = MaxPooling2D(pool_size=(1,2))(conv)
for i in range(int(np.log2(bin_multiple))-1):
print(i)
#residual block
bn = BatchNormalization()(pool)
re = Activation('relu')(bn)
freq_range = int((bin_multiple/(2**(i+1)))*note_range)
print(freq_range)
conv = Conv2D(64,(1,freq_range),padding="same",activation='relu')(re)
#add and downsample
ad = add([pool,conv])
pool = MaxPooling2D(pool_size=(1,2))(ad)
flattened = Flatten()(pool)
fc = Dense(1024, activation='relu')(flattened)
do = Dropout(0.5)(fc)
fc = Dense(512, activation='relu')(do)
do = Dropout(0.5)(fc)
outputs = Dense(note_range, activation='sigmoid')(do)
model = Model(inputs=inputs, outputs=outputs)
return model
model = resnet_model(bin_multiple)
init_lr = float(args['init_lr'])
model.compile(loss='binary_crossentropy',
optimizer=SGD(lr=init_lr,momentum=0.9), metrics=['accuracy', 'mae', 'categorical_accuracy'])
model.summary()
history = model.fit_generator(trainGen.next(),trainGen.steps(), epochs=epochs,
verbose=1,validation_data=valGen.next(),validation_steps=valGen.steps(),callbacks=callbacks, workers=8, use_multiprocessing=True)
원하는 크기로 마지막 배치를 채우거나 마지막 배치에 예제를 놓아서 해결할 수 있습니다. 나를 위해, 나는 패딩 것들을 했어. –