#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, обратного пути нет. Это для того, чтобы вычислять градиенты с помощью этих операций.