#python #tensorflow #keras
#python #тензорный поток #keras
Вопрос:
Я пытаюсь принять 2 входных данных в свою модель. Но у него есть странная проблема.
x1= layers.Input((20000,))
x2= layers.Reshape((200,100), input_shape=(20000,))(x1)
y1= layers.Input((200000,))
y2= layers.Reshape((2000,100), input_shape=(200000,))(y1)
combine = layers.Concatenate(axis=1)([x2, y2])
model = tf.keras.Model(inputs=[x1, y1], outputs=combine)
model.predict([datasetA, datasetB])
Если я принимаю один ввод, модель может быть запущена.
model = tf.keras.Model(inputs=[x1], output=x2)
model.predict(datasetA)
Но если я принимаю два ввода, модель мертва.
Failed to find data adapter that can handle input: (<class 'list'> containing values of types {"<class 'tensorflow.python.data.ops.dataset_ops.PrefetchDataset'>"}), <class 'NoneType'>
т.е. структура моего набора данных:
<PrefetchDataset shapes: ((None, 20000), (None,)), types: (tf.int64, tf.int32)>
1 Dataset -> 5 Batche_data and 5 batch_Label
Each Batch_data -> 3 records
Each record -> [20000]
Each batch_Label -> 3 records
Each label -> 0 / 1 for classification
Как я могу решить эту проблему?
model.summary()
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_3 (InputLayer) [(None, 20000)] 0
__________________________________________________________________________________________________
input_4 (InputLayer) [(None, 200000)] 0
__________________________________________________________________________________________________
reshape_2 (Reshape) (None, 200, 100) 0 input_3[0][0]
__________________________________________________________________________________________________
reshape_3 (Reshape) (None, 2000, 100) 0 input_4[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 2200, 100) 0 reshape_2[0][0]
reshape_3[0][0]
Комментарии:
1. Можете ли вы создать сгенерированный набор данных, чтобы мы могли скопировать / вставить ваш код и воспроизвести ошибку?
2. Используйте набор данных tf из тензорных срезов с массивом numpy
Ответ №1:
вы использовали tensoflow.keras
для импорта слоев? а также можете ли вы распечатать model.summary
Единственное, что может быть проблемой, — это формы, которые вы проходите через модель.
Этот код работает правильно. тензорный поток == 2.0.0
import tensorflow as tf
import numpy as np
datasetA = np.zeros((10,20000),dtype=int)
datasetB = np.zeros((10,200000),dtype=int)
x1= tf.keras.layers.Input((20000,))
x2= tf.keras.layers.Reshape((200,100), input_shape=(20000,))(x1)
y1= tf.keras.layers.Input((200000,))
y2= tf.keras.layers.Reshape((2000,100), input_shape=(200000,))(y1)
combine = tf.keras.layers.Concatenate(axis=1)([x2, y2])
model = tf.keras.Model(inputs=[x1, y1], outputs=combine)
model.summary()
model.predict([datasetA, datasetB])
print('the predict done')], outputs=combine)
Комментарии:
1. @h4nk Я передал массив числовых нулей с определенной вами формой, и он работает правильно.
2. @h4nk В примере, который вы упомянули выше, текст и метка объединены вместе, как в этом методе
vectorize_text
, возможно, вы использовали это как «Набор данных», а «Набор данных» содержит как текст, так и метку