Я прочитал и ищу похожий вопрос, но ответы у меня не сработали, даже если я попробую его несколькими способами.
У меня есть набор данных, который таким образом представляет 4.000.000 различных строк, представляющих ячейку (категориальные данные), и 4.000.000 долготы, широты, представляющих, где эти ячейки находятся здесь, является фрагментом набора данных (числовые данные)
device_id seconds latitude longitude
jg4M/taYRc2cBJPGa8c7vw== 752 53.392060 -2.069796
Я создаю эту модель, она работает, но у меня возникают проблемы, когда я пытаюсь подогнать ее.Модель имеет набор слоев для категориальных данных и отдельный набор слоев для числовых данных.И я объединяю их.Все работает нормально, пока не подойдет часть. Вот код.
device_id = Input(name = 'data_tf', shape = [1,1])
visible = Input(name = 'X_train', shape=(3,1,1))
#this is the categorical layers
top_words = 10376
embedding_vector_length = 22
x = Embedding(top_words, embedding_vector_length)(device_id)
x = Dense(2, activation='sigmoid')(x)
modelx = Model(inputs=device_id, outputs = x)
#this are the numerical layers
hidden1 = Dense(10, activation='relu')(visible)
hidden2 = Dense(20, activation='relu')(hidden1)
hidden3 = Dense(10, activation='relu')(hidden2)
output = Dense(2, activation='sigmoid')(hidden3)
modely = Model(inputs=visible, outputs=output)
#merge the two set of layers and all this works perfectly
merge = concatenate([x, output], axis =1)
#layers after concatenate
hidden1 = Dense(10, activation='relu')(merge)
hidden2 = Dense(10, activation='relu')(hidden1)
output = Dense(2, activation='sigmoid')(hidden2)
model = Model(inputs=[device_id,visible], outputs=output)
Вот краткое изложение модели:
Layer (type) Output Shape Param # Connected to
==================================================================================================
X_train (InputLayer) (None, 3, 1, 1) 0
__________________________________________________________________________________________________
dense_2 (Dense) (None, 3, 1, 10) 20 X_train[0][0]
__________________________________________________________________________________________________
data_tf (InputLayer) (None, 1, 1) 0
__________________________________________________________________________________________________
dense_3 (Dense) (None, 3, 1, 20) 220 dense_2[0][0]
__________________________________________________________________________________________________
embedding_1 (Embedding) (None, 1, 1, 22) 228272 data_tf[0][0]
__________________________________________________________________________________________________
dense_4 (Dense) (None, 3, 1, 10) 210 dense_3[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 1, 1, 2) 46 embedding_1[0][0]
__________________________________________________________________________________________________
dense_5 (Dense) (None, 3, 1, 2) 22 dense_4[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 4, 1, 2) 0 dense_1[0][0]
dense_5[0][0]
__________________________________________________________________________________________________
dense_6 (Dense) (None, 4, 1, 10) 30 concatenate_1[0][0]
__________________________________________________________________________________________________
dense_7 (Dense) (None, 4, 1, 10) 110 dense_6[0][0]
__________________________________________________________________________________________________
dense_8 (Dense) (None, 4, 1, 2) 22 dense_7[0][0]
==================================================================================================
Total params: 228,952
Trainable params: 228,952
Non-trainable params: 0
__________________________________________________________________________________________________
None
затем
model.compile(loss='binary_crossentropy',optimizer='adam', metrics=['accuracy'])
но этоэто часть, которая не работает:
model.fit((visible,device_id),X_trainY, batch_size=10, epochs=5, verbose=1)
AttributeError: 'tuple' object has no attribute 'ndim'
У меня есть поиск в течение 4 дней, похожий вопрос, но ни один из них не работает для меня.
Может ли кто-нибудь помочь?
ОБНОВЛЕНИЕ Я аккуратно поставил скобки, как это предложено ниже Ришабхом Сахраватом, и теперь у меня есть эта проблема
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-53-9b35f717e3e7> in <module>
----> 1 model.fit([visible,device_id],X_trainY, batch_size=10, epochs=5, verbose=1)
//anaconda3/lib/python3.7/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
950 sample_weight=sample_weight,
951 class_weight=class_weight,
--> 952 batch_size=batch_size)
953 # Prepare validation data.
954 do_validation = False
//anaconda3/lib/python3.7/site-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
749 feed_input_shapes,
750 check_batch_axis=False, # Don't enforce the batch size.
--> 751 exception_prefix='input')
752
753 if y is not None:
//anaconda3/lib/python3.7/site-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
90 data = data.values if data.__class__.__name__ == 'DataFrame' else data
91 data = [data]
---> 92 data = [standardize_single_array(x) for x in data]
93
94 if len(data) != len(names):
//anaconda3/lib/python3.7/site-packages/keras/engine/training_utils.py in <listcomp>(.0)
90 data = data.values if data.__class__.__name__ == 'DataFrame' else data
91 data = [data]
---> 92 data = [standardize_single_array(x) for x in data]
93
94 if len(data) != len(names):
//anaconda3/lib/python3.7/site-packages/keras/engine/training_utils.py in standardize_single_array(x)
23 'When feeding symbolic tensors to a model, we expect the'
24 'tensors to have a static batch size. '
---> 25 'Got tensor with shape: %s' % str(shape))
26 return x
27 elif x.ndim == 1:
ValueError: When feeding symbolic tensors to a model, we expect thetensors to have a static batch size. Got tensor with shape: (None, 3, 1, 1)