在Tensorflow 2.0上,每当我传递一个Pandas DataFrame作为输入时,Tensorflow就可以正常工作,但会打印出一个警告WARNING:tensorflow:Falling back from v2 loop because of error: Failed to find data adapter that can handle input: <class 'pandas.core.frame.DataFrame'>, <class 'NoneType'>
。我不记得在TF 1.x中遇到过这样的错误,所以这一定是新的错误。但为什么这是个警告呢?
我理解它要求的是什么,是的,将DataFrame转换为纯numpy数组确实会使错误消失。但为什么TF在乎呢?尽管发出了警告,但它显然可以在DataFrame上正常工作。Scikit--学习还需要一个numpy数组,但是当您传递一个DataFrame时,这个数组工作得很好。Tf1.x在DataFrame中也能正常工作。熊猫是非常普遍的,所以为什么TF 2.0假装它不能处理它(尽管它显然可以)?TF不想支付将DataFrame转换为TF.DataSet的成本,这仅仅是一种效率问题吗?但是TF现在要求我去做转换,那么这比让TF自己做转换更有效吗?(此外,与训练期间数十亿次的繁衍相比,大熊猫一开始投入的开销无疑是微不足道的。)
import tensorflow as tf
import numpy as np
#Make some fake data
df = pd.DataFrame()
NUM_ROWS = 1000
NUM_FEATURES = 50
random_data = np.random.normal(size=(NUM_ROWS, NUM_FEATURES))
df = pd.DataFrame(data=random_data, columns=['x_' + str(ii) for ii in range(NUM_FEATURES)])
y = df.sum(axis=1) + np.random.normal(size=(NUM_ROWS))
model = tf.keras.Sequential([
tf.keras.layers.Dense(40, input_dim=df.shape[1], activation='relu'),
tf.keras.layers.Dense(1, activation='linear')
])
NUM_EPOCHS = 500
model.compile(optimizer='adam', loss='mean_squared_error');
hist = model.fit(df, y, epochs=1, verbose=0) ###This gives the warning (but still works fine anyway)
这个警告的目的是什么?
发布于 2020-06-05 05:52:24
我在TF 2.0
中重新创建了您的问题,并在Tensorflow 2.1中修复了提交,2019年11月23日的617f788
因此,请将您的Tensorflow
版本升级到2.1
或2.2
,该问题将得到解决。
工作守则如下:
!pip install tensorflow==2.2.0
import tensorflow as tf
import numpy as np
import pandas as pd
print(tf.__version__)
#Make some fake data
df = pd.DataFrame()
NUM_ROWS = 1000
NUM_FEATURES = 50
random_data = np.random.normal(size=(NUM_ROWS, NUM_FEATURES))
df = pd.DataFrame(data=random_data, columns=['x_' + str(ii) for ii in range(NUM_FEATURES)])
y = df.sum(axis=1) + np.random.normal(size=(NUM_ROWS))
model = tf.keras.Sequential([
tf.keras.layers.Dense(40, input_dim=df.shape[1], activation='relu'),
tf.keras.layers.Dense(1, activation='linear')
])
NUM_EPOCHS = 500
model.compile(optimizer='adam', loss='mean_squared_error')
hist = model.fit(df, y, epochs=1, verbose=1)
输出:
2.2.0
Train on 1000 samples
1000/1000 [==============================] - 0s 411us/sample - loss: 49.0524
如果您观察到输出警告不再出现。
https://stackoverflow.com/questions/59165650
复制