Ошибка при проверке целевого объекта модели: список массивов Numpy, передаваемых в вашу модель, не соответствует размеру, ожидаемому моделью - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь предсказать 3 свойства материала на основе 4 входных данных. входы: скорость нагрева, температура, давление, время выходы: плотность, размер зерна, твердость

Я уже пытался использовать np.array(), tf.reshape() и np.ndarray() ничего не получалось

 def build_model():
        model = keras.Sequential([
            layers.Dense(4, activation = tf.nn.relu, input_shape = [len(train_dataset.keys())]),
            layers.Dense(64, activation = tf.nn.sigmoid),
            layers.Dense(64, activation = tf.nn.relu),
            layers.Dense(64, activation = tf.nn.relu),
            layers.Dense(3)
        ])

    optimizer = keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)

    model.compile(loss = 'mean_squared_error',
                 optimizer = optimizer,
                 metrics = ['mean_absolute_error', 'mean_squared_error'])
    return model

model.summary()

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_35 (Dense)             (None, 4)                 20        
_________________________________________________________________
dense_36 (Dense)             (None, 64)                320       
_________________________________________________________________
dense_37 (Dense)             (None, 64)                4160      
_________________________________________________________________
dense_38 (Dense)             (None, 64)                4160      
_________________________________________________________________
dense_39 (Dense)             (None, 3)                 195       
=================================================================
Total params: 8,855
Trainable params: 8,855
Non-trainable params: 0
_________________________________________________________________



 print(np.array(normed_train_data))
    print(train_labels)

[[0.78865053 0.75882112 0.66666667 1.        ]
 [0.78865053 0.92764634 1.         0.33333333]
 [1.         0.84323373 1.         0.33333333]
 [1.         0.95176422 1.         0.33333333]
 [0.78865053 0.95176422 1.         0.        ]
 [0.78865053 0.95176422 1.         0.33333333]
 [0.78865053 0.92764634 1.         0.66666667]
 [1.         0.92764634 1.         0.33333333]
 [1.         0.87941056 1.         0.33333333]
 [0.78865053 0.97588211 1.         0.2       ]
 [0.78865053 0.90352845 0.66666667 1.        ]
 [1.         0.80705689 1.         0.33333333]
 [0.78865053 1.         0.66666667 0.66666667]
 [1.         0.83117478 1.         0.33333333]
 [0.78865053 0.97588211 1.         0.2       ]
 [0.78865053 1.         1.         0.2       ]
 [0.78865053 0.71058534 0.66666667 1.        ]
 [0.78865053 0.90352845 1.         0.33333333]
 [0.78865053 0.95176422 0.66666667 1.        ]
 [0.78865053 0.85046909 0.66666667 1.        ]
 [1.         0.80705689 1.         0.33333333]]
[[2      66.5
28     96.8
13     96.4
10     99.0
26     98.2
24    100.0
27     97.6
11     99.0
17     96.2
22    100.0
5      81.8
16     71.4
8      96.0
14     91.9
23    100.0
20    100.0
1      65.8
29     90.3
6      94.4
4      71.8
18     91.9
Name: density, dtype: float64], [2      4.000
28     0.688
13     0.474
10     0.564
26     0.688
24     0.811
27     0.688
11     0.564
17     0.082
22    25.000
5      4.000
16     0.564
8      4.000
14     0.444
23     0.877
20    51.000
1      4.000
29     0.688
6      4.000
4      4.000
18     0.074
Name: grain size, dtype: float64], [2       400000000
28    29400000000
13    31800000000
10    31800000000
26    32300000000
24    35600000000
27    31800000000
11    31800000000
17    31800000000
22    30700000000
5      6700000000
16    31800000000
8     33300000000
14    31800000000
23    34200000000
20    28500000000
1       200000000
29    22800000000
6     32000000000
4      2400000000
18    31800000000
Name: hardness, dtype: int64]]

class PrintDot(keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs):
        if epoch % 100 == 0: print('')
        print('.',end='')

EPOCH=1000

history = model.fit(normed_train_data, train_labels,
epochs=EPOCH, validation_split = 0.2, verbose=0,
callbacks=[PrintDot()])

ValueError: Ошибка при проверке целевого объекта модели: список массивов Numpy, передаваемых в вашу модель, отличается от ожидаемого размера модели. Ожидается увидеть 1 массив (ов), но вместо этого получит следующий список из 3 массивов

Я ожидаю, что машина научит меня выдавать эти 3 выхода, отобразит их с соответствующим реальным значением и получит ошибку.

1 Ответ

0 голосов
/ 30 мая 2019

Я предполагаю, что вы пытаетесь передать массив формы [строки, столбцы] в качестве входных данных, где вы упомянули столбцы = 4. Если это так, то приведенный ниже код должен работать для вас.

Ни один во входной форме не соответствует длине данных (или строк).

model = keras.Sequential([
            layers.Dense(64, activation = tf.nn.sigmoid, input_shape = [None, 4]),
            layers.Dense(64, activation = tf.nn.relu),
            layers.Dense(64, activation = tf.nn.relu),
            layers.Dense(3)
        ])

Приведенная выше модель принимает входные данные каждого размера 4 и передает их по 3 скрытым слоям из 64 нейронов и выводит векторразмером 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...