Я использую простые данные радужной оболочки, которые имеют 4 функции. И я хочу сделать некоторые шаги предварительной обработки перед входом в сеть. Например, я хочу, чтобы мой NN получал только 3 функции, в среднем две последовательные оригинальные функции.
# x shape is 120 data x 4 features
tmp = np.zeros((x.shape[0],x.shape[1]-1))
for i in range(x.shape[1]-1):
tmp[:,i] = (x[:,i]+x[:,i+1])/2.
x = deepcopy(tmp) # after preprocess its shape 120 x 3 features
Я попытался добавить эти шаги в input_function
и изменить определение всей формы feature_columns
на 3:
def input_function(x, y, is_train):
tmp = np.zeros((x.shape[0],x.shape[1]-1))
for i in range(x.shape[1]-1):
tmp[:,i] = (x[:,i]+x[:,i+1])/2.
x = deepcopy(tmp)
dict_x = { "thisisinput" : x }
dataset = tf.data.Dataset.from_tensor_slices((
dict_x, y
))
if is_train:
dataset = dataset.shuffle(num_train).repeat(num_epoch).batch(num_train)
else:
dataset = dataset.batch(num_test)
return dataset
способ обучения классификатора:
feature_columns = [
tf.feature_column.numeric_column(key="featurename",shape=3),
]
classifier = tf.estimator.DNNClassifier(
feature_columns=feature_columns,
hidden_units=[50, 20],
n_classes=3,
optimizer=tf.train.GradientDescentOptimizer(0.001),
activation_fn=tf.nn.relu,
model_dir = 'modeliris2/'
)
classifier.train(
input_fn=lambda:input_function(xtrain, ytrain, True)
)
функция ввода моего обслуживания:
def my_serving_input_fn2():
input_data = {
"featurename" : tf.placeholder(tf.float32, [None, 3], name='inputtensors')
}
return tf.estimator.export.ServingInputReceiver(input_data, input_data)
Он работает, когда я запускаю его, но если я замораживаю модель, а затем использую ее для прогнозирования, она не работает. он сказал:
ValueError: Невозможно передать значение формы (1, 4) для Tensor 'import / inputtensors: 0', который имеет форму '(?, 3)'
Если я изменю feature_columns
на my_serving_input_fn
на [Нет, 4], после зависания модели все равно будет ошибка:
InvalidArgumentError (см. Выше для отслеживания): вход для изменения формы является тензор с 4 значениями, но запрошенная форма имеет 3
Мой вопрос, если мне нужно включить какие-либо этапы предварительной обработки или разработки функций (например, MFCC в предварительную обработку сигналов и т. Д.) В мою модель, куда мне ее поместить? Мой подход правильный? почему произошла ошибка? или есть лучшее решение?
и дополнительный вопрос: что, если на моих этапах предварительной обработки мне нужно включить внешние файлы (например, список стоп-слов в предварительной обработке текста и т. Д.), Все еще возможно включить эти файлы для предварительной обработки с использованием TF lite?