Ver em TensorFlow.org
|
Executar no Google Colab
|
Ver código fonte no GitHub
|
Baixar notebook
|
Este tutorial fornece um exemplo de como carregar dataframe do pandas em um tf.data.Dataset.
Este tutorial usa um pequeno conjunto de dados fornecido pela Cleveland Clinic Foundation for Heart Disease. Existem várias centenas de linhas no CSV. Cada linha descreve um paciente e cada coluna descreve um atributo. Usaremos essas informações para prever se um paciente tem uma doença cardíaca, que neste conjunto de dados é uma tarefa de classificação binária.
Ler os dados usando pandas
from __future__ import absolute_import, division, print_function, unicode_literals
try:
# %tensorflow_version only exists in Colab.
%tensorflow_version 2.x
except Exception:
pass
import pandas as pd
import tensorflow as tf
Fazer download do arquivo csv que contém o conjunto de dados do coração.
csv_file = tf.keras.utils.get_file('heart.csv', 'https://storage.googleapis.com/applied-dl/heart.csv')
Downloading data from https://storage.googleapis.com/applied-dl/heart.csv 8192/13273 [=================>............] - ETA: 0s 16384/13273 [=====================================] - 0s 0us/step
Ler o arquivo csv usando pandas.
df = pd.read_csv(csv_file)
df.head()
df.dtypes
age int64 sex int64 cp int64 trestbps int64 chol int64 fbs int64 restecg int64 thalach int64 exang int64 oldpeak float64 slope int64 ca int64 thal object target int64 dtype: object
Converta a coluna thal, que é um objeto no dataframe para um valor numérico discreto
df['thal'] = pd.Categorical(df['thal'])
df['thal'] = df.thal.cat.codes
df.head()
Carregar dados usando o tf.data.Dataset
Use tf.data.Dataset.from_tensor_slices para ler os valores de um dataframe do pandas.
Uma das vantagens do uso do tf.data.Dataset é que ele permite escrever pipelines de dados simples e altamente eficientes. Leia o loading data guide para obter mais informações.
target = df.pop('target')
dataset = tf.data.Dataset.from_tensor_slices((df.values, target.values))
for feat, targ in dataset.take(5):
print ('Features: {}, Target: {}'.format(feat, targ))
Features: [ 63. 1. 1. 145. 233. 1. 2. 150. 0. 2.3 3. 0. 2. ], Target: 0 Features: [ 67. 1. 4. 160. 286. 0. 2. 108. 1. 1.5 2. 3. 3. ], Target: 1 Features: [ 67. 1. 4. 120. 229. 0. 2. 129. 1. 2.6 2. 2. 4. ], Target: 0 Features: [ 37. 1. 3. 130. 250. 0. 0. 187. 0. 3.5 3. 0. 3. ], Target: 0 Features: [ 41. 0. 2. 130. 204. 0. 2. 172. 0. 1.4 1. 0. 3. ], Target: 0
Como um pd.Series implementa o protocolo __array__, ele pode ser usado de forma transparente em praticamente qualquer lugar que você usaria um np.array ou um tf.Tensor.
tf.constant(df['thal'])
<tf.Tensor: shape=(303,), dtype=int8, numpy=
array([2, 3, 4, 3, 3, 3, 3, 3, 4, 4, 2, 3, 2, 4, 4, 3, 4, 3, 3, 3, 3, 3,
3, 4, 4, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 3, 4, 2, 4, 3, 4, 3, 4, 4,
2, 3, 3, 4, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 4,
4, 2, 3, 3, 4, 3, 4, 3, 3, 4, 4, 3, 3, 4, 4, 3, 3, 3, 3, 4, 4, 4,
3, 3, 4, 3, 4, 4, 3, 4, 3, 3, 3, 4, 3, 4, 4, 3, 3, 4, 4, 4, 4, 4,
3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 3, 3, 2, 4, 4, 2, 3, 3, 4, 4, 3, 4,
3, 3, 4, 2, 4, 4, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
4, 3, 3, 3, 4, 3, 4, 3, 4, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 2,
4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 2, 2, 4, 3, 4, 2, 4, 3,
3, 4, 3, 3, 3, 3, 4, 3, 4, 3, 4, 2, 2, 4, 3, 4, 3, 2, 4, 3, 3, 2,
4, 4, 4, 4, 3, 0, 3, 3, 3, 3, 1, 4, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4,
3, 3, 4, 4, 4, 4, 3, 3, 4, 3, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 3, 3,
3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 3, 2, 4, 4, 4, 4], dtype=int8)>
Aleatório e lote do conjunto de dados.
train_dataset = dataset.shuffle(len(df)).batch(1)
Crirar e treinar um modelo
def get_compiled_model():
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(10, activation='relu'),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=['accuracy'])
return model
model = get_compiled_model()
model.fit(train_dataset, epochs=15)
Epoch 1/15
WARNING:tensorflow:Layer dense is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2. The layer has dtype float32 because its dtype defaults to floatx.
If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.
To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.
1/303 [..............................] - ETA: 0s - loss: 1.5467e-06 - accuracy: 1.0000
28/303 [=>............................] - ETA: 0s - loss: 4.3005 - accuracy: 0.6786
56/303 [====>.........................] - ETA: 0s - loss: 3.9851 - accuracy: 0.6964
83/303 [=======>......................] - ETA: 0s - loss: 2.9319 - accuracy: 0.7349
111/303 [=========>....................] - ETA: 0s - loss: 3.0377 - accuracy: 0.7477
139/303 [============>.................] - ETA: 0s - loss: 3.6195 - accuracy: 0.7122
168/303 [===============>..............] - ETA: 0s - loss: 3.7857 - accuracy: 0.7024
197/303 [==================>...........] - ETA: 0s - loss: 3.8022 - accuracy: 0.6954
225/303 [=====================>........] - ETA: 0s - loss: 3.8382 - accuracy: 0.6933
254/303 [========================>.....] - ETA: 0s - loss: 3.5854 - accuracy: 0.7008
284/303 [===========================>..] - ETA: 0s - loss: 3.3544 - accuracy: 0.7007
303/303 [==============================] - 1s 2ms/step - loss: 3.3850 - accuracy: 0.6964
Epoch 2/15
1/303 [..............................] - ETA: 0s - loss: 1.9297e-07 - accuracy: 1.0000
31/303 [==>...........................] - ETA: 0s - loss: 1.1653 - accuracy: 0.8387
59/303 [====>.........................] - ETA: 0s - loss: 1.1033 - accuracy: 0.8475
87/303 [=======>......................] - ETA: 0s - loss: 2.0410 - accuracy: 0.7241
115/303 [==========>...................] - ETA: 0s - loss: 1.9506 - accuracy: 0.7130
143/303 [=============>................] - ETA: 0s - loss: 1.9830 - accuracy: 0.6993
170/303 [===============>..............] - ETA: 0s - loss: 1.8923 - accuracy: 0.6824
199/303 [==================>...........] - ETA: 0s - loss: 1.8589 - accuracy: 0.6784
227/303 [=====================>........] - ETA: 0s - loss: 1.8845 - accuracy: 0.6828
256/303 [========================>.....] - ETA: 0s - loss: 1.8698 - accuracy: 0.6836
285/303 [===========================>..] - ETA: 0s - loss: 1.8506 - accuracy: 0.6912
303/303 [==============================] - 1s 2ms/step - loss: 1.8797 - accuracy: 0.6931
Epoch 3/15
1/303 [..............................] - ETA: 0s - loss: 2.9271e-05 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 1.5278 - accuracy: 0.7931
57/303 [====>.........................] - ETA: 0s - loss: 1.3368 - accuracy: 0.7544
85/303 [=======>......................] - ETA: 0s - loss: 1.0804 - accuracy: 0.7882
113/303 [==========>...................] - ETA: 0s - loss: 1.2407 - accuracy: 0.7257
141/303 [============>.................] - ETA: 0s - loss: 1.1706 - accuracy: 0.7234
169/303 [===============>..............] - ETA: 0s - loss: 1.1700 - accuracy: 0.7337
198/303 [==================>...........] - ETA: 0s - loss: 1.4425 - accuracy: 0.6970
227/303 [=====================>........] - ETA: 0s - loss: 1.3728 - accuracy: 0.7048
256/303 [========================>.....] - ETA: 0s - loss: 1.3354 - accuracy: 0.7148
284/303 [===========================>..] - ETA: 0s - loss: 1.3429 - accuracy: 0.7077
303/303 [==============================] - 1s 2ms/step - loss: 1.3348 - accuracy: 0.7063
Epoch 4/15
1/303 [..............................] - ETA: 0s - loss: 2.9582e-04 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 1.4422 - accuracy: 0.7586
58/303 [====>.........................] - ETA: 0s - loss: 1.2606 - accuracy: 0.7241
87/303 [=======>......................] - ETA: 0s - loss: 0.9904 - accuracy: 0.8046
115/303 [==========>...................] - ETA: 0s - loss: 0.9850 - accuracy: 0.7652
142/303 [=============>................] - ETA: 0s - loss: 1.0972 - accuracy: 0.7394
170/303 [===============>..............] - ETA: 0s - loss: 1.1322 - accuracy: 0.7294
199/303 [==================>...........] - ETA: 0s - loss: 1.0999 - accuracy: 0.7286
228/303 [=====================>........] - ETA: 0s - loss: 1.1507 - accuracy: 0.7193
258/303 [========================>.....] - ETA: 0s - loss: 1.4657 - accuracy: 0.7093
288/303 [===========================>..] - ETA: 0s - loss: 1.5150 - accuracy: 0.6979
303/303 [==============================] - 1s 2ms/step - loss: 1.5040 - accuracy: 0.6997
Epoch 5/15
1/303 [..............................] - ETA: 0s - loss: 0.0429 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.7618 - accuracy: 0.7667
59/303 [====>.........................] - ETA: 0s - loss: 1.1391 - accuracy: 0.7288
89/303 [=======>......................] - ETA: 0s - loss: 0.9083 - accuracy: 0.7865
118/303 [==========>...................] - ETA: 0s - loss: 1.0129 - accuracy: 0.7458
147/303 [=============>................] - ETA: 0s - loss: 0.8929 - accuracy: 0.7755
177/303 [================>.............] - ETA: 0s - loss: 0.9130 - accuracy: 0.7740
207/303 [===================>..........] - ETA: 0s - loss: 0.8741 - accuracy: 0.7681
237/303 [======================>.......] - ETA: 0s - loss: 0.9470 - accuracy: 0.7595
266/303 [=========================>....] - ETA: 0s - loss: 0.9455 - accuracy: 0.7594
295/303 [============================>.] - ETA: 0s - loss: 0.9951 - accuracy: 0.7492
303/303 [==============================] - 1s 2ms/step - loss: 1.0072 - accuracy: 0.7393
Epoch 6/15
1/303 [..............................] - ETA: 0s - loss: 1.7463 - accuracy: 0.0000e+00
29/303 [=>............................] - ETA: 0s - loss: 0.3252 - accuracy: 0.8966
58/303 [====>.........................] - ETA: 0s - loss: 0.4544 - accuracy: 0.8621
86/303 [=======>......................] - ETA: 0s - loss: 0.6967 - accuracy: 0.8372
113/303 [==========>...................] - ETA: 0s - loss: 0.8177 - accuracy: 0.7965
141/303 [============>.................] - ETA: 0s - loss: 0.8173 - accuracy: 0.8156
170/303 [===============>..............] - ETA: 0s - loss: 0.8435 - accuracy: 0.7941
199/303 [==================>...........] - ETA: 0s - loss: 0.7820 - accuracy: 0.8040
228/303 [=====================>........] - ETA: 0s - loss: 0.7886 - accuracy: 0.7851
256/303 [========================>.....] - ETA: 0s - loss: 0.8023 - accuracy: 0.7812
285/303 [===========================>..] - ETA: 0s - loss: 0.8057 - accuracy: 0.7930
303/303 [==============================] - 1s 2ms/step - loss: 0.8372 - accuracy: 0.7822
Epoch 7/15
1/303 [..............................] - ETA: 0s - loss: 0.0242 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.3259 - accuracy: 0.8000
59/303 [====>.........................] - ETA: 0s - loss: 0.5161 - accuracy: 0.7966
88/303 [=======>......................] - ETA: 0s - loss: 0.6284 - accuracy: 0.7955
116/303 [==========>...................] - ETA: 0s - loss: 0.7680 - accuracy: 0.7759
145/303 [=============>................] - ETA: 0s - loss: 0.8251 - accuracy: 0.7724
173/303 [================>.............] - ETA: 0s - loss: 0.7712 - accuracy: 0.7919
202/303 [===================>..........] - ETA: 0s - loss: 0.8133 - accuracy: 0.7723
231/303 [=====================>........] - ETA: 0s - loss: 0.7852 - accuracy: 0.7749
259/303 [========================>.....] - ETA: 0s - loss: 0.7722 - accuracy: 0.7876
288/303 [===========================>..] - ETA: 0s - loss: 0.7861 - accuracy: 0.7917
303/303 [==============================] - 1s 2ms/step - loss: 0.7832 - accuracy: 0.7888
Epoch 8/15
1/303 [..............................] - ETA: 0s - loss: 0.0503 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.6562 - accuracy: 0.8000
59/303 [====>.........................] - ETA: 0s - loss: 0.7946 - accuracy: 0.7627
87/303 [=======>......................] - ETA: 0s - loss: 0.8174 - accuracy: 0.7356
115/303 [==========>...................] - ETA: 0s - loss: 0.6488 - accuracy: 0.7826
144/303 [=============>................] - ETA: 0s - loss: 0.7156 - accuracy: 0.7708
173/303 [================>.............] - ETA: 0s - loss: 0.7453 - accuracy: 0.7803
202/303 [===================>..........] - ETA: 0s - loss: 0.7499 - accuracy: 0.7871
231/303 [=====================>........] - ETA: 0s - loss: 0.8227 - accuracy: 0.7706
260/303 [========================>.....] - ETA: 0s - loss: 0.7811 - accuracy: 0.7769
289/303 [===========================>..] - ETA: 0s - loss: 0.7514 - accuracy: 0.7855
303/303 [==============================] - 1s 2ms/step - loss: 0.7457 - accuracy: 0.7921
Epoch 9/15
1/303 [..............................] - ETA: 0s - loss: 0.0027 - accuracy: 1.0000
31/303 [==>...........................] - ETA: 0s - loss: 0.4270 - accuracy: 0.8065
60/303 [====>.........................] - ETA: 0s - loss: 0.5072 - accuracy: 0.8000
89/303 [=======>......................] - ETA: 0s - loss: 0.4775 - accuracy: 0.8202
117/303 [==========>...................] - ETA: 0s - loss: 0.5128 - accuracy: 0.8205
145/303 [=============>................] - ETA: 0s - loss: 0.4948 - accuracy: 0.8069
173/303 [================>.............] - ETA: 0s - loss: 0.5143 - accuracy: 0.8150
201/303 [==================>...........] - ETA: 0s - loss: 0.5651 - accuracy: 0.8060
229/303 [=====================>........] - ETA: 0s - loss: 0.6011 - accuracy: 0.7948
257/303 [========================>.....] - ETA: 0s - loss: 0.6295 - accuracy: 0.7821
286/303 [===========================>..] - ETA: 0s - loss: 0.6303 - accuracy: 0.7867
303/303 [==============================] - 1s 2ms/step - loss: 0.6368 - accuracy: 0.7789
Epoch 10/15
1/303 [..............................] - ETA: 0s - loss: 1.3689 - accuracy: 0.0000e+00
30/303 [=>............................] - ETA: 0s - loss: 0.3818 - accuracy: 0.8333
58/303 [====>.........................] - ETA: 0s - loss: 0.3681 - accuracy: 0.8621
86/303 [=======>......................] - ETA: 0s - loss: 0.5001 - accuracy: 0.8605
114/303 [==========>...................] - ETA: 0s - loss: 0.5399 - accuracy: 0.8509
142/303 [=============>................] - ETA: 0s - loss: 0.6280 - accuracy: 0.8169
170/303 [===============>..............] - ETA: 0s - loss: 0.5642 - accuracy: 0.8235
199/303 [==================>...........] - ETA: 0s - loss: 0.7110 - accuracy: 0.7990
228/303 [=====================>........] - ETA: 0s - loss: 0.6574 - accuracy: 0.8070
256/303 [========================>.....] - ETA: 0s - loss: 0.6571 - accuracy: 0.8008
284/303 [===========================>..] - ETA: 0s - loss: 0.6982 - accuracy: 0.7852
303/303 [==============================] - 1s 2ms/step - loss: 0.7353 - accuracy: 0.7756
Epoch 11/15
1/303 [..............................] - ETA: 0s - loss: 4.1361e-04 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 0.5946 - accuracy: 0.7586
57/303 [====>.........................] - ETA: 0s - loss: 0.7557 - accuracy: 0.7368
85/303 [=======>......................] - ETA: 0s - loss: 0.7498 - accuracy: 0.7882
114/303 [==========>...................] - ETA: 0s - loss: 0.6632 - accuracy: 0.7982
142/303 [=============>................] - ETA: 0s - loss: 0.6186 - accuracy: 0.8099
170/303 [===============>..............] - ETA: 0s - loss: 0.7424 - accuracy: 0.7941
198/303 [==================>...........] - ETA: 0s - loss: 0.7236 - accuracy: 0.8081
227/303 [=====================>........] - ETA: 0s - loss: 0.6910 - accuracy: 0.8194
255/303 [========================>.....] - ETA: 0s - loss: 0.6468 - accuracy: 0.8275
284/303 [===========================>..] - ETA: 0s - loss: 0.6279 - accuracy: 0.8275
303/303 [==============================] - 1s 2ms/step - loss: 0.6158 - accuracy: 0.8218
Epoch 12/15
1/303 [..............................] - ETA: 0s - loss: 0.4278 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 0.3258 - accuracy: 0.8621
57/303 [====>.........................] - ETA: 0s - loss: 0.3266 - accuracy: 0.8772
85/303 [=======>......................] - ETA: 0s - loss: 0.4070 - accuracy: 0.8118
114/303 [==========>...................] - ETA: 0s - loss: 0.4456 - accuracy: 0.8158
142/303 [=============>................] - ETA: 0s - loss: 0.4048 - accuracy: 0.8239
171/303 [===============>..............] - ETA: 0s - loss: 0.4036 - accuracy: 0.8304
199/303 [==================>...........] - ETA: 0s - loss: 0.4434 - accuracy: 0.8040
228/303 [=====================>........] - ETA: 0s - loss: 0.4917 - accuracy: 0.7982
255/303 [========================>.....] - ETA: 0s - loss: 0.5185 - accuracy: 0.7843
282/303 [==========================>...] - ETA: 0s - loss: 0.5422 - accuracy: 0.7837
303/303 [==============================] - 1s 2ms/step - loss: 0.5253 - accuracy: 0.7954
Epoch 13/15
1/303 [..............................] - ETA: 0s - loss: 9.9377e-05 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.4766 - accuracy: 0.9000
58/303 [====>.........................] - ETA: 0s - loss: 0.9561 - accuracy: 0.7931
86/303 [=======>......................] - ETA: 0s - loss: 0.8731 - accuracy: 0.7907
114/303 [==========>...................] - ETA: 0s - loss: 0.7311 - accuracy: 0.7807
142/303 [=============>................] - ETA: 0s - loss: 0.7363 - accuracy: 0.7676
171/303 [===============>..............] - ETA: 0s - loss: 0.8182 - accuracy: 0.7719
199/303 [==================>...........] - ETA: 0s - loss: 0.8295 - accuracy: 0.7638
227/303 [=====================>........] - ETA: 0s - loss: 0.8156 - accuracy: 0.7709
255/303 [========================>.....] - ETA: 0s - loss: 0.7813 - accuracy: 0.7804
284/303 [===========================>..] - ETA: 0s - loss: 0.7307 - accuracy: 0.7852
303/303 [==============================] - 1s 2ms/step - loss: 0.7066 - accuracy: 0.7921
Epoch 14/15
1/303 [..............................] - ETA: 0s - loss: 0.3864 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 0.4538 - accuracy: 0.8621
57/303 [====>.........................] - ETA: 0s - loss: 0.4616 - accuracy: 0.8421
85/303 [=======>......................] - ETA: 0s - loss: 0.5882 - accuracy: 0.8000
113/303 [==========>...................] - ETA: 0s - loss: 0.6923 - accuracy: 0.7965
141/303 [============>.................] - ETA: 0s - loss: 0.6154 - accuracy: 0.8227
169/303 [===============>..............] - ETA: 0s - loss: 0.5985 - accuracy: 0.8225
197/303 [==================>...........] - ETA: 0s - loss: 0.6117 - accuracy: 0.8122
225/303 [=====================>........] - ETA: 0s - loss: 0.5908 - accuracy: 0.8133
254/303 [========================>.....] - ETA: 0s - loss: 0.6254 - accuracy: 0.7992
283/303 [===========================>..] - ETA: 0s - loss: 0.6618 - accuracy: 0.7915
303/303 [==============================] - 1s 2ms/step - loss: 0.6731 - accuracy: 0.7921
Epoch 15/15
1/303 [..............................] - ETA: 0s - loss: 2.9692 - accuracy: 0.0000e+00
30/303 [=>............................] - ETA: 0s - loss: 0.6236 - accuracy: 0.7667
58/303 [====>.........................] - ETA: 0s - loss: 0.6608 - accuracy: 0.7586
87/303 [=======>......................] - ETA: 0s - loss: 0.6714 - accuracy: 0.7816
116/303 [==========>...................] - ETA: 0s - loss: 0.5656 - accuracy: 0.8190
144/303 [=============>................] - ETA: 0s - loss: 0.8468 - accuracy: 0.7708
172/303 [================>.............] - ETA: 0s - loss: 0.9488 - accuracy: 0.7558
201/303 [==================>...........] - ETA: 0s - loss: 0.9018 - accuracy: 0.7562
230/303 [=====================>........] - ETA: 0s - loss: 0.8368 - accuracy: 0.7739
259/303 [========================>.....] - ETA: 0s - loss: 0.8284 - accuracy: 0.7568
288/303 [===========================>..] - ETA: 0s - loss: 0.7815 - accuracy: 0.7674
303/303 [==============================] - 1s 2ms/step - loss: 0.7600 - accuracy: 0.7756
<tensorflow.python.keras.callbacks.History at 0x7f3f5f32c710>
Alternativa para colunas de características
Passar um dicionário como entrada para um modelo é tão fácil quanto criar um dicionário correspondente de camadas tf.keras.layers.Input, aplicar qualquer pré-processamento e empilhá-los usando a API funcional. Você pode usar isso como uma alternativa para colunas de características.
inputs = {key: tf.keras.layers.Input(shape=(), name=key) for key in df.keys()}
x = tf.stack(list(inputs.values()), axis=-1)
x = tf.keras.layers.Dense(10, activation='relu')(x)
output = tf.keras.layers.Dense(1)(x)
model_func = tf.keras.Model(inputs=inputs, outputs=output)
model_func.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=['accuracy'])
A maneira mais fácil de preservar a estrutura da coluna de um pd.DataFrame quando usado com tf.data é converter o pd.DataFrame em um dict e dividir esse dicionário.
dict_slices = tf.data.Dataset.from_tensor_slices((df.to_dict('list'), target.values)).batch(16)
for dict_slice in dict_slices.take(1):
print (dict_slice)
({'age': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, 56, 56, 44, 52, 57],
dtype=int32)>, 'sex': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1], dtype=int32)>, 'cp': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([1, 4, 4, 3, 2, 2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3], dtype=int32)>, 'trestbps': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([145, 160, 120, 130, 130, 120, 140, 120, 130, 140, 140, 140, 130,
120, 172, 150], dtype=int32)>, 'chol': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([233, 286, 229, 250, 204, 236, 268, 354, 254, 203, 192, 294, 256,
263, 199, 168], dtype=int32)>, 'fbs': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0], dtype=int32)>, 'restecg': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0], dtype=int32)>, 'thalach': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([150, 108, 129, 187, 172, 178, 160, 163, 147, 155, 148, 153, 142,
173, 162, 174], dtype=int32)>, 'exang': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int32)>, 'oldpeak': <tf.Tensor: shape=(16,), dtype=float32, numpy=
array([2.3, 1.5, 2.6, 3.5, 1.4, 0.8, 3.6, 0.6, 1.4, 3.1, 0.4, 1.3, 0.6,
0. , 0.5, 1.6], dtype=float32)>, 'slope': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([3, 2, 2, 3, 1, 1, 3, 1, 2, 3, 2, 2, 2, 1, 1, 1], dtype=int32)>, 'ca': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([0, 3, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0], dtype=int32)>, 'thal': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([2, 3, 4, 3, 3, 3, 3, 3, 4, 4, 2, 3, 2, 4, 4, 3], dtype=int32)>}, <tf.Tensor: shape=(16,), dtype=int64, numpy=array([0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0])>)
model_func.fit(dict_slices, epochs=15)
Epoch 1/15 1/19 [>.............................] - ETA: 0s - loss: 4.6000 - accuracy: 0.7500 19/19 [==============================] - 0s 2ms/step - loss: 2.8664 - accuracy: 0.6799 Epoch 2/15 1/19 [>.............................] - ETA: 0s - loss: 1.7118 - accuracy: 0.5625 19/19 [==============================] - 0s 2ms/step - loss: 1.2796 - accuracy: 0.5842 Epoch 3/15 1/19 [>.............................] - ETA: 0s - loss: 0.7722 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.8998 - accuracy: 0.6766 Epoch 4/15 1/19 [>.............................] - ETA: 0s - loss: 0.6410 - accuracy: 0.6875 19/19 [==============================] - 0s 3ms/step - loss: 0.8758 - accuracy: 0.6931 Epoch 5/15 1/19 [>.............................] - ETA: 0s - loss: 0.6018 - accuracy: 0.6875 19/19 [==============================] - 0s 2ms/step - loss: 0.8052 - accuracy: 0.6964 Epoch 6/15 1/19 [>.............................] - ETA: 0s - loss: 0.6144 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.7569 - accuracy: 0.6898 Epoch 7/15 1/19 [>.............................] - ETA: 0s - loss: 0.6143 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.7212 - accuracy: 0.6931 Epoch 8/15 1/19 [>.............................] - ETA: 0s - loss: 0.6072 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.6975 - accuracy: 0.7063 Epoch 9/15 1/19 [>.............................] - ETA: 0s - loss: 0.6011 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.6805 - accuracy: 0.6997 Epoch 10/15 1/19 [>.............................] - ETA: 0s - loss: 0.5951 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.6660 - accuracy: 0.7030 Epoch 11/15 1/19 [>.............................] - ETA: 0s - loss: 0.5914 - accuracy: 0.6250 19/19 [==============================] - 0s 2ms/step - loss: 0.6535 - accuracy: 0.7096 Epoch 12/15 1/19 [>.............................] - ETA: 0s - loss: 0.5882 - accuracy: 0.6875 19/19 [==============================] - 0s 2ms/step - loss: 0.6415 - accuracy: 0.7096 Epoch 13/15 1/19 [>.............................] - ETA: 0s - loss: 0.5809 - accuracy: 0.6875 19/19 [==============================] - 0s 2ms/step - loss: 0.6296 - accuracy: 0.7096 Epoch 14/15 1/19 [>.............................] - ETA: 0s - loss: 0.5760 - accuracy: 0.6875 19/19 [==============================] - 0s 2ms/step - loss: 0.6207 - accuracy: 0.7129 Epoch 15/15 1/19 [>.............................] - ETA: 0s - loss: 0.5698 - accuracy: 0.6875 19/19 [==============================] - 0s 2ms/step - loss: 0.6114 - accuracy: 0.7162 <tensorflow.python.keras.callbacks.History at 0x7f3f8d4789b0>
Ver em TensorFlow.org
Executar no Google Colab
Ver código fonte no GitHub
Baixar notebook