我有30组3D点,它们是描述30个对象的关键点,每组包含10个点,这些点表示为X,形状为[30,10,3]。经过一定的变换后,我还具有30个对象的相应3D点,表示为具有[30,10,3]形状的Y。
现在,我想使用X和Y作为数据和注释,从这30个对象中训练机器学习模型,并预测变换后新对象的关键点坐标。
有人知道如何使用python吗?
答案 0 :(得分:0)
由于输入和输出的尺寸太大(30),因此30个任务集似乎太少了。如果需要映射这些高维数据,则需要成千上万个示例(更多集合)。
我建议模拟转换以生成数千个样本。然后使用小型神经网络从X预测Y。因此,输入没有空间或时间维度,而是代表离散点,我认为卷积或递归模型不会有用。
因此,从一个具有均方误差损失的小MLP开始。但是,如果输出点始终是整数,那么考虑范围也不大,您也可以将其建模为分类问题。
我在喀拉拉邦添加了一个小型神经网络模型来预测转化。
import numpy as np
import keras
import tensorflow
from keras.layers import Input, Dense, Reshape
from keras.models import Model
X = np.random.randint(-100, 100, (3000, 10, 3)) # 10 3d points
Y = 2*(X + 5)/7 # this is our simple transformation operation
print(X.shape)
print(Y.shape)
in_m = Input(shape=(30,)) # input layer
f1_fc = Dense(100, activation = 'relu')(in_m) # first fc layer
f2_fc = Dense(30, activation = 'linear')(f1_fc) # second fc layer
simple_model = Model(in_m, f2_fc)
simple_model.summary()
simple_model.compile(loss='mse', metrics=['mae'], optimizer='adam')
X_flat = np.reshape(X, (3000, 30))
Y_flat = np.reshape(Y, (3000, 30))
hist = simple_model.fit(X_flat, Y_flat, epochs = 100, validation_split = 0.2, batch_size = 20)
输出:
(3000, 10, 3)
(3000, 10, 3)
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_9 (InputLayer) (None, 30) 0
_________________________________________________________________
dense_15 (Dense) (None, 100) 3100
_________________________________________________________________
dense_16 (Dense) (None, 30) 3030
=================================================================
Total params: 6,130
Trainable params: 6,130
Non-trainable params: 0