InvalidArgumentError: невозможно вычислить MatMul, так как ожидается, что вход № 0 (с нуля) будет тензором с плавающей точкой, но является двойным тензором [Op: MatMul]

Здесь существует простое решение задачи. Эта команда:

script.dir <- dirname(sys.frame(1)$ofile)

возвращает путь к текущему файлу скрипта. Он работает после сохранения сценария.

2
задан Ankish Bansal 18 January 2019 в 17:05
поделиться

1 ответ

Часть 1: Проблема действительно в типе данных вашего ввода. По умолчанию ваша модель keras ожидает float32, но вы передаете float64. Вы можете либо изменить dtype модели, либо изменить ввод на float32.

Чтобы изменить свою модель:

def make_model():
    net = tf.keras.Sequential()
    net.add(tf.keras.layers.Dense(4, activation='relu', dtype='float32'))
    net.add(tf.keras.layers.Dense(4, activation='relu'))
    net.add(tf.keras.layers.Dense(1))
    return net

Чтобы изменить ввод: y = y.astype('float32')

Часть 2: Вам необходимо вызвать функцию, которая вычисляет вашу модель (то есть model(data)) под tf.GradientTape (). Например, вы можете заменить ваш метод compute_loss следующим:

def compute_loss(model, x, y):
    pred = model(x)
    return tf.reduce_mean(tf.square(tf.subtract(pred, y)))
0
ответ дан Anna Krogager 18 January 2019 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: