Tensorflow model.fit()返回带有所有浮点输入的NaN

时间:2019-02-28 06:43:04

标签: python tensorflow keras

我正在尝试运行一个非常类似于Tensorflow教程(具有我自己的数据集)的回归模型。我的数据和标签是numpy数组中的float值,例如:

数据,变量名input_array

[[0.63473794 0.16736857 0.19028714 1.38746357 1.00389089 1.78771353]
 [0.58772032 0.19225393 0.22888241 1.41612279 1.09661261 1.52805896]
 [0.37530531 0.19501039 0.24683006 1.31084661 1.14897087 0.86286696]
 [0.29121152 0.19009779 0.255342   1.16257489 1.16012728 0.1838582 ]]

标签,变量名label_array

[[-0.00362812]
 [-0.00136054]
 [-0.00181653]
 [ 0.00136302]]

我的模型的构建依据:

model = keras.Sequential([
layers.Dense(64, activation=tf.nn.relu, input_shape=[len(input_array.keys())]),

layers.Dense(64, activation=tf.nn.relu),
layers.Dense(1)
])
optimizer = tf.keras.optimizers.RMSprop(0.001)

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

训练功能是:

history = model.fit(
  input_array, label_array,
  epochs=EPOCHS, validation_split = 0.2, verbose=0,
  callbacks=[cp_callback])

对于任何时期,模型都会返回:

   loss  mean_absolute_error  ...  val_mean_squared_error  epoch
0   NaN                  NaN  ...                     NaN      0

我不确定是由哪个非数字引起的,因为我给模型提供的所有值都是数字。

2 个答案:

答案 0 :(得分:1)

我对代码进行了一些简化,并且可以在colab中正常运行。

from __future__ import print_function

from tensorflow.python import keras
from keras.layers import Dense, Activation
from keras.models import Sequential, Model
import numpy as np

input_array = np.array([
 [0.63473794, 0.16736857, 0.19028714, 1.38746357, 1.00389089, 1.78771353],
 [0.58772032, 0.19225393, 0.22888241, 1.41612279, 1.09661261, 1.52805896],
 [0.37530531, 0.19501039, 0.24683006, 1.31084661, 1.14897087, 0.86286696],
 [0.29121152, 0.19009779, 0.255342,   1.16257489, 1.16012728, 0.1838582 ]])

label_array = np.array([
    [-0.00362812],
    [-0.00136054],
    [-0.00181653],
    [ 0.00136302]])

model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(input_array.shape[1],)))
model.add(Dense(64, activation='relu'))
model.add(Dense(1))

model.compile(loss='mean_squared_error',
              optimizer='rmsprop', validation_split=0.25,
              metrics=['mean_absolute_error', 'mean_squared_error'])


model.fit(input_array, label_array, epochs=100)

通常,除非有必要,否则避免混合keras和tf API很有用。我了解这并不能完全查明代码中的问题,但我希望它对您继续前进很有用。

答案 1 :(得分:0)

我自己没有遇到这个问题,并且刚刚开始使用keras。但是我已经读到其他人在不良条件数据方面遇到麻烦,并且更改优化程序可能可以解决问题。

RMSprop 1上的keras文档说,这对循环网络很有用,而在您的代码中则不是这样。