首页 > 解决方案 > Tensorflow 2.0 Beta:Model.fit() 抛出 ValueError:参数和签名参数不匹配:56 57

问题描述

我是机器学习的新手。我正在尝试在 Tensorflow 2.0 中制作一个简单的 RNN,但遇到了障碍。我已将其简化为重现问题的最小示例。这个最小示例的目标是让 RNN 学习重复输出 1.0。

import os
import sys
import math
from random import shuffle
import numpy as np
import tensorflow as tf
from time import time as time

epochs = 200
batch_size = 32
chunk_length = 64
features = 10

def main():
    train_dataset = np.zeros([batch_size, chunk_length, features]) + 1
    test_dataset = np.zeros([batch_size, chunk_length, features]) + 1

    with tf.device('/gpu:0'):
        model = tf.keras.Sequential([
            tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(
                64, return_sequences=True)),
            tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),
            tf.keras.layers.Dense(64, activation='relu'),
            tf.keras.layers.Dense(1, activation='sigmoid')
        ])
        model.compile(loss='mean_absolute_error',
            optimizer='adam',
            metrics=['accuracy'])

        history = model.fit(train_dataset, batch_size=batch_size, epochs=epochs)

        test_loss, test_acc = model.evaluate(test_dataset)

        print('Test Loss: {}'.format(test_loss))
        print('Test Accuracy: {}'.format(test_acc))

if __name__ == '__main__':
    main()

当我运行它时,我得到ValueError: Arguments and signature arguments do not match: 56 57. 如果我注释掉最后一层,我得到ValueError: Arguments and signature arguments do not match: 50 51. 如果我注释掉我得到的最后两层ValueError: Arguments and signature arguments do not match: 44 45

我尝试修改我提供的所有常量(epochs、batch_size、chunk_length 和 features),但这些对错误没有影响。我还尝试删除 1 到 numpy 数组的元素加法,但这也没有效果。

这是 TensorFlow 中的错误还是我在做一些愚蠢的事情?

标签: pythontensorflowtensorflow2.0tf.keras

解决方案


我使用的是 tensorflow 版本 1.13.1 并且没有 GPU,但希望这仍然可以解决问题。似乎您只提供了网络输入数据 (x),但没有提供响应数据 (y)。所以模型没有什么可以学习的。我只添加了响应数据 train_Y_dataset 和 test_Y_dataset。以下代码在 tensorflow 1.13.1 中对我有用,请参阅评论以了解更改:

导入操作系统
导入系统
导入数学
从随机导入洗牌
将 numpy 导入为 np
将张量流导入为 tf
从时间导入时间作为时间

epochs = 200 batch_size = 32 chunk_length = 64 features = 10 def main(): train_X_dataset = np.zeros([batch_size, chunk_length, features]) + 1 # add train_Y_dataset: train_Y_dataset = np.zeros([batch_size, 1]) + 1 test_X_dataset = np.zeros([batch_size, chunk_length, features]) + 1 # add test_Y_dataset: test_Y_dataset = np.zeros([batch_size, 1]) + 1 #1 #with tf.device('/gpu:0'): model = tf.keras.Sequential([ tf.keras.layers.Bidirectional(tf.keras.layers.LSTM( 64, return_sequences=True)), tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['accuracy']) # add the response variable train_Y_dataset in fit history = model.fit(x=train_X_dataset, y=train_Y_dataset, batch_size=batch_size, epochs=epochs) # add the response variable test_Y_dataset in evaluate test_loss, test_acc = model.evaluate(x=test_X_dataset, y=test_Y_dataset) print('Test Loss: {}'.format(test_loss)) print('Test Accuracy: {}'.format(test_acc)) if __name__ == '__main__': main()

推荐阅读