ValueError: при подаче символьных тензоров в модель мы ожидаем, что тензоры будут иметь статический размер пакета

1

Я новичок в Keras и я пытался создать text-classification CNN модель text-classification CNN с использованием Python 3.6 когда я столкнулся с этой ошибкой:

Traceback (most recent call last):
  File "model.py", line 94, in <module>
    model.fit([x1, x2], y_label, batch_size=batch_size, epochs=epochs, verbose=1, callbacks=[checkpoint], validation_split=0.2)  # starts training
  File "/../../anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 955, in fit
    batch_size=batch_size)
  File "/../../anaconda3/lib/python3.6/site-packages/keras/engine/training.py", line 754, in _standardize_user_data
    exception_prefix='input')
  File "/../../anaconda3/lib/python3.6/site-packages/keras/engine/training_utils.py", line 90, in standardize_input_data
    data = [standardize_single_array(x) for x in data]
  File "/../../anaconda3/lib/python3.6/site-packages/keras/engine/training_utils.py", line 90, in <listcomp>
    data = [standardize_single_array(x) for x in data]
  File "/../../anaconda3/lib/python3.6/site-packages/keras/engine/training_utils.py", line 23, in standardize_single_array
    'Got tensor with shape: %s' % str(shape))
ValueError: When feeding symbolic tensors to a model, we expect thetensors to have a static batch size. Got tensor with shape: (None, 50, 100)

Мой код для модели находится здесь:

print("\nCreating Model...")
x1 = Input(shape=(seq_len1, 100), name='x1')
x2 = Input(shape=(seq_len2, 100), name='x2')
x1_r = Reshape((seq_len1, embedding_dim, 1))(x1)
x2_r = Reshape((seq_len2, embedding_dim, 1))(x2)

conv_0 = Conv2D(num_filters, kernel_size=(filter_sizes[0], 1), padding='valid', kernel_initializer='normal', activation='relu')
.
# Conv layers with different filter sizes
.    
maxpool = MaxPool2D(pool_size=(2, 1), strides=(1,1), padding='valid')

output1 = conv_0(x1_r)
output1 = maxpool(output1)
output1 = conv_1(output1)
output1 = maxpool(output1)
output1 = conv_2(output1)
output1 = maxpool(output1)
.
# Same for output2
.
concatenated_tensor = Concatenate(axis=1)([output1, output2])
flatten = Flatten()(concatenated_tensor)
.
# Dense layers
. 
# this creates a model that includes
model = Model(inputs=[x1, x2], outputs=[output])
.    
.
model.fit([x1, x2], y_label, batch_size=batch_size, epochs=epochs, verbose=1, callbacks=[checkpoint], validation_split=0.2)  # starts training

Я встречаю эту ошибку в строке model.fit. Здесь seq_len1 = 50 и seq_len2 = 120. Пожалуйста, помогите мне решить эту проблему.

Теги:
tensorflow
keras
deep-learning
conv-neural-network

1 ответ

1
Лучший ответ

@Vatsal, пожалуйста, ознакомьтесь с функциональным API-интерфейсом для Keras: https://keras.io/getting-started/functional-api-guide/

В вашей команде model.fit ваши первые аргументы являются переменными Input Layer, это должны быть ваши фактические данные, которые вы пытаетесь поместить. Вы указали свои исходные слои на модель в предпоследней строке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню