TypeError: Ввод 'y' из 'Equal' Op имеет тип float32, который не соответствует типу int32 аргумента 'x' - PullRequest
0 голосов
/ 23 марта 2019

Я довольно новичок в Keras и LSTM. Я пытался обучить мою модель последовательностей прогнозированию будущей цены акции с помощью приведенного ниже кода, но ошибка выше продолжала появляться.

Я попытался изменить dtypes обоих x_data, y_data с помощью .astype (np.float16). Тем не менее, каждый раз, когда я возвращаюсь с сообщением об ошибке TypeError, у меня есть тип float32.

Если это поможет, вот формы моих данных:

xtrain.shape: (32, 24, 67), ytrain.shape: (32, 24, 1), xtest.shape : (38, 67), ytest.shape: (38, 1)

Кто-нибудь знает, что может быть не так? Я застрял в этом на некоторое время. Было бы здорово, если бы кто-нибудь дал мне подсказку.

y_data = y_data.to_numpy().astype(np.float32)
x_data = main_df.to_numpy().astype(np.float32)

num_x_signals = x_data.shape[1]
num_y_signals = y_data.shape[1]

# SPLIT TRAIN TEST DATA
ratio = 0.85
train_ratio = int(ratio * len(x_data))

x_train = x_data[0:train_ratio]
x_test = x_data[train_ratio:]

y_train = y_data[0:train_ratio]
y_test = y_data[train_ratio:]

# GENERATE RANDOM SEQUENCES
batch_size = 32
sequence_length = 24
EPOCHS = 50

def batch_generator(x_train, y_train, batch_size, sequence_length, num_x_signals, num_y_signals, num_train):
    while True:
        x_shape = (batch_size, sequence_length, num_x_signals)
        x_batch = np.zeros(shape = x_shape).astype(np.float32)

        y_shape = (batch_size, sequence_length, num_y_signals)
        y_batch = np.zeros(shape = y_shape).astype(np.float32)

        for i in range(batch_size):
            idx = np.random.randint(num_train - sequence_length)

            x_batch[i] = x_train[idx:idx+sequence_length]
            y_batch[i] = y_train[idx:idx+sequence_length]

        yield (x_batch, y_batch)

generator = batch_generator(x_train, y_train, batch_size, sequence_length, num_x_signals, num_y_signals, train_ratio)
xtrain, ytrain = next(generator)
xtest, ytest = (np.expand_dims(x_test, axis=0),
                np.expand_dims(y_test, axis=0))

# LSTM MODEL
model = Sequential()
model.add(LSTM(32, input_shape = (None, num_x_signals,), return_sequences = True))
model.add(Dropout(0.2))
model.add(BatchNormalization())

model.add(LSTM(128, return_sequences = True))
model.add(Dropout(0.15))
model.add(BatchNormalization())

model.add(LSTM(128))
model.add(Dropout(0.18))
model.add(BatchNormalization())

model.add(Dense(32, activation = 'relu'))
model.add(Dropout(0.2))

model.add(Dense(1, activation = 'softmax'))

opt = tf.keras.optimizers.Adam(lr = 0.001, decay = 1e-6)

model.compile(
    loss = 'sparse_categorical_crossentropy',
    optimizer = opt,
    metrics = ['accuracy']
)

name_of_file = f"{to_predict}-{sequence_length}-{future_predict}-{int(time.time())}"
tensorboard = TensorBoard(log_dir = "logs/{}".format(name_of_file))

filepath = "LSTM_Final-{epoch:02d}-{val_acc:.3f}"
checkpoint = ModelCheckpoint("models/{}.model".format(filepath, monitor = 'val_acc', verbose = 1, save_best_only = True, mode = 'max')) # saves only the best ones

history = model.fit(
    xtrain, ytrain,
    epochs = EPOCHS,
    validation_data = (xtest, ytest),
    callbacks = [tensorboard, checkpoint]
)

score = model.evaluate(xtest, ytest, verbose = 0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

model.save("models/{}".format(name_of_file))

1 Ответ

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

Я обнаружил, что эта проблема связана с указанной функцией потерь.

Мой код:

import tensorflow as tf
from tensorflow import keras

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

#I changed the loss function from 'sparse_categorical_crossentropy' to 'mean_squared error'
model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy'])

X = train_dataset.to_numpy()
y = train_labels.to_numpy()
model.fit(X,y, epochs=5)

Форма X была (920,3) и dtype = float64

y форма была (920,1) и dtype = float64

Моя проблема была в методе model.fit.Я взял функцию sparse_categorical_crossentropy из примера распознавания изображений, и здесь я попробовал нейронную сеть для прогнозирования цен на жилье.

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