У меня проблема с кормлением моего заполнителя. У меня следующее сообщение об ошибке:
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'NSregex_9/Placeholder' with dtype float and shape [?,30]
Я добавляю заполнитель в np.array формы [1, 30]:
with tf.Session() as session:
session.run(tf.global_variables_initializer())
regexp_vector = generate_tf_vector_from_list_regexp(NSinput, regexplist)
regexp_vector = np.expand_dims(regexp_vector, axis=0)
print("regexp_vector", regexp_vector, type(regexp_vector))
session.run(tf.tables_initializer(), feed_dict={NSregex: regexp_vector})
history = NSmodel.fit(input_train,
output_train,
validation_data=(input_test, output_test),
epochs=100,
batch_size=32)
выходные данные функции generate_tf_vector_from_list_regexp (x, y) - это пустой массив размера 30. Поэтому я расширяю его еще на 1 измерение, чтобы оно соответствовало форме моего элемента:
Итак, я изо всех сил пытаюсь найти решение для правильной подачи заполнителя. Каждый слой моей модели имеет форму (?, N). Вопросительный знак (?) Должен оцениваться в соответствии с размером batch_size ... Я не понимаю, в чем я не прав.
Под кодом вы можете найти общий контекст:
def generate_tf_vector_from_list_regexp(s, listr):
'''
input is string tensor
listr is a string list of regexp
'''
v=[]
for regexp in listr:
if tf.reshape(tf.strings.regex_full_match(s,tf.convert_to_tensor(regexp, dtype=tf.string)), [])==True:
v.append(1.0)
else:
v.append(0.0)
return np.asarray(v)
функция lamnda regexEmbedding - это просто лямбда-функция для создания моего placeHolder:
def RegexEmbedding(x):
return = tf.placeholder(tf.float32, shape=[None, nb_classe])
и модель:
NSinput = layers.Input(shape=(1,), dtype=tf.string, name='NSinput')
NSuse = layers.Lambda(UniversalEmbedding, output_shape=(embed_size,), name="NSuse")(NSinput)
NSregex = layers.Lambda(RegexEmbedding, input_shape=(1,), output_shape=(nb_classe,), name="NSregex")(NSinput)
NSconcat = layers.concatenate([NSuse, NSregex], axis=1)
NSdenseConcat = layers.Dense(256, input_shape=(dims,), activation='relu', name="NSdenseConcat")(NSconcat)
NSoutput = layers.Dense(nb_classe, activation='softmax', name="NSoutput")(NSdenseConcat)
NSmodel = Model(inputs=NSinput, outputs=NSoutput)
NSmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
NSmodel.summary()
Большое спасибо !!