Как преобразовать тензор tf в некоторую форму, которая может соответствовать keras?

#tensorflow #machine-learning #keras

#tensorflow #машинное обучение #keras

Вопрос:

Я использую keras для построения сети, однако мне нужно объявить тензор tf, чтобы выполнить некоторые вычисления cuda в set_abstraction_msg и set_abstraction методах, а затем преобразовать тензор обратно в некоторые виды формы, которые keras может дополнить и подогнать. Как я могу это сделать?

Обычно вызывается приведенный ниже метод getModel , но я вызвал его pointnet2 вместо этого.

Приведенный ниже код в основном предназначен для того, чтобы, во-первых, объявить заполнитель tensorflow, во-вторых, выполнить некоторые вычисления cuda и применить Conv2D и BatchNormalization в set_abstraction_msg и set_abstraction методах, в-третьих, применить некоторые Dense , BatchNormalization и Dropout операции.

 def pointnet2(nb_classes):
    input_points = tf.placeholder(tf.float32, shape=(16, 1024, 3))
    model_input = Input(tensor=input_points)

    sa1_xyz, sa1_points = set_abstraction_msg(model_input,
                                              None,
                                              512,
                                              [0.1, 0.2, 0.4],
                                              [16, 32, 128],
                                              [[32, 32, 64], [64, 64, 128], [64, 96, 128]])

    sa2_xyz, sa2_points = set_abstraction_msg(sa1_xyz,
                                              sa1_points,
                                              128,
                                              [0.2, 0.4, 0.8],
                                              [32, 64, 128],
                                              [[64, 64, 128], [128, 128, 256], [128, 128, 256]])

    sa3_xyz, sa3_points = set_abstraction(sa2_xyz,
                                          sa2_points,
                                          [256, 512, 1024])

    # point_net_cls
    c = Dense(512, activation='relu')(sa3_points)
    c = BatchNormalization()(c)
    c = Dropout(0.5)(c)
    c = Dense(256, activation='relu')(c)
    c = BatchNormalization()(c)
    c = Dropout(0.5)(c)
    c = Dense(nb_classes, activation='softmax')(c)
    prediction = Flatten()(c)

    model = Model(inputs=model_input, outputs=prediction)

    # turn tf tensor to keras
    return model
  

Я пытался Input(tensor=input_points) . Оказалось, что prediction это тензор, который для меня является префектом. Но я хочу, чтобы тензор в конце концов был преобразован в форму keras, и приведенный выше код получил некоторую ошибку, подобную этой в этой строке Model(inputs=model_input, outputs=prediction) :

 Output tensors to a Model must be the output of a TensorFlow Layer (thus holding past layer metadata). Found: Tensor("flatten/Reshape:0", shape=(16, 40), dtype=float32)
  

Для получения дополнительной информации полный проект code находится здесь: https://github.com/HarborZeng/pointnet2-keras

Комментарии:

1. Вы должны включить код того, что вы на самом деле пробовали, а не просто несколько случайных сообщений об ошибках.

2. вы пробовали создавать пользовательский слой keras keras.io/layers/writing-your-own-keras-layers ?

3. @nickthefreak Я не пробовал этот способ, потому что я не знаю как. У вас случайно нет примера или демонстрации?

4. @MatiasValdenegro Я обновил содержание вопроса, пожалуйста, взгляните.

5. Итак, я предполагаю, что эти вызовы функции set_abstraction выполняют вычисления CUDA? Как это реализовано? Для этого им нужно использовать операции tensorflow, обратного пути нет. Это для того, чтобы вычислять градиенты с помощью этих операций.