Tensorflow, каков наилучший способ добавить дополнительную информацию в последовательную модель?

#python #numpy #tensorflow #keras

#python #numpy #tensorflow #keras

Вопрос:

Я новичок в машинном обучении и пытаюсь понять, как создавать модели.

Что я пытаюсь сделать.

 import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers

# this are my X and Y values
X = np.array([ [x, x 1 ] for x in range(80) ])
Y = [ x   2 for x in range(80) ]

# The data given in this case is random but has a pridictable pattern.
# if i would use a list of [81,82,1,2] 
# to predict once i fit the model it will give 83.

# I have this extra information that could be helpful for the prediction.
extra_info = [ 1, 2 ]

# What is the best way to add this extra information?

# This is the only way i konw how to add it:
X = np.array([ [x, x 1, extra_info[0], extra_info[1] ] for x in range(80) ])
  

Это правильный способ сделать это?

Это не приведет к путанице в модели?

И если extra_info бы в нем было более 1000 полей, это тоже было бы правильно?

 model = keras.Sequential([
  layers.Dense( 64, activation='relu', input_shape =[ 4 ] ),
  layers.Dense( 64, activation='relu' ),
  layers.Dense( 1 )
])

model.compile(
    loss='mse',
    optimizer = tf.keras.optimizers.RMSprop( 0.001 ),
    metrics=['mae', 'mse']
)

history = model.fit(
  X, Y, epochs=20, verbose=0,
)

print(model.predict(np.array([80,81,1,2])))
  

Ответ №1:

Если у вас есть дополнительная информация, которую вы хотите передать модели, вам следует обратиться к функциональному API Keras. Это позволяет вам определять дополнительные входные данные, а затем объединять разные пути. Это позволяет, например, создать один путь ввода для каждого объекта.

Если вам нужно придерживаться последовательного API, это, вероятно, лучший и единственный способ справиться с этим на данный момент.

Ответ №2:

Проблема, с которой вы столкнетесь при выполнении этого, заключается в следующем: 1. Данные хранятся в массиве numpy, а не в тензоре, который является входным сигналом, ожидаемым моделью. Чтобы преобразовать их, вам просто нужно использовать метод tensorflow convert_to_tensor (ознакомьтесь с этой документацией: https://www.tensorflow.org/api_docs/python/tf/convert_to_tensor ). Это будет выглядеть примерно так:

 X = tf.convert_to_tensor(X)
Y = tf.convert_to_tensor(Y)
  

2. На самом деле модель не может предсказать здесь шаблон, поскольку вы просто вводите в него случайные числа, поэтому будет казаться, что он ничему не учится. 3. При прогнозировании вы предоставляете весь обучающий набор данных, что может немного запутать ситуацию. 2 и 3 на самом деле не имеют никаких проблем, просто нужно иметь в виду. В остальном у вас все отлично.
Надеюсь, это помогло!

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

1. Пункт 1 неверен. Вам не нужно преобразовывать входные данные в тензоры (см. keras.io/getting_started/intro_to_keras_for_engineers ). Также пункт 2 на самом деле не соответствует действительности, поскольку во входных данных явно присутствует шаблон…

2. Да, но это все равно даст случайный результат.