У меня есть набор данных, содержащий точечные данные (координаты x, y, z) для различных объектов. Каждый из наборов баллов имеет разное количество баллов. В общем, у меня есть список длиной 525, то есть он имеет 525 наборов точек. Каждый из этих наборов точек имеет различную длину. У меня есть модель, предназначенная для использования этих неупорядоченных наборов точек (PointNet). Теперь я хочу тренировать эту модель. У меня проблема с выяснением того, как обучить эту модель с имеющимся у меня набором данных.
Я попробовал model.fit, используя набор данных, который имеет одинаковое количество точек для каждого объекта, и это работает. После чего я сделал еще один набор данных с различным количеством точек для каждого объекта. Это не удалось. Я использую Tensorflow 1.14.0.
Я попробовал реализацию API более низкого уровня. Что-то вроде:
train_loss = tf.keras.metrics.Mean(name='train_loss')
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()
@tf.function
def train_step(x,y):
with tf.GradientTape() as tape:
pred = model(x)
loss = loss_object(y, pred)
grad = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grad, model.trainable_variables))
train_loss(loss)
train_accuracy(y, pred)
EPOCHS = 10
for i in range(EPOCHS):
for x,y in zip(X_new,Y):
train_step(x,y)
template = 'Epoch {}, Loss: {}, Accuracy: {}'
print(template.format(i+1, train_loss.result(), train_accuracy.result()*100))
train_loss.reset()
train_accuracy.reset()
Ожидаемый результат - список прогнозов (проблема классификации). Я получаю сообщение об ошибке: AttributeError: в преобразованном коде:
<ipython-input-12-9d980c4ffb08>:6 train_step *
grad = tape.gradient(loss, model.trainable_variables)
AttributeError: 'Model' object has no attribute 'trainable_variables'
Я не понимаю ошибку. Пожалуйста, помогите кому-нибудь:)