Tensorflow 2.0 Beta: Model.fit() throws ValueError: Arguments and signature arguments do not match: 56 57

Tensorflow 2.0 Beta: Model.fit() throws ValueError: Arguments and signature arguments do not match: 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.

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

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

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

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_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()

请记住,model.fit()model.evaluate() 等函数需要传入标签。