Sequential

one input, one output

from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Flatten, Input

def buind_fn():
    model = Sequential()

    model.add(Flatten(input_shape=(4,)))
    model.add(Dense(128, activation='relu'))
    model.add(Dense(64, activation='relu'))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(3, activation='softmax'))

    model.summary()

    model.compile(loss='categorical_crossentropy', metrics=['acc'], optimizer='adam')
    
    return model

model.fit(iris.iloc[:,:-1], pd.get_dummies(iris.species), epochs=10)

Model

multi inputs, multi outputs

def bind_fn():
    input_ = Input(shape=(4,))
    mo = Dense(128, activation='relu')(input_)
    mo = Dense(64, activation='relu')(mo)
    mo = Dense(32, activation='relu')(mo)
    mo = Dense(3, activation='softmax')(mo)
    model = Model(input_, mo)
    
    model.compile(loss='categorical_crossentropy', optimizer='adam', 
             metrics=['acc'])
    
    return model
    

KerasClassifier

from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

kc = KerasClassifier(buind_fn)

kc.fit(iris.iloc[:,:-1], pd.get_dummies(iris.species), epochs=1)
'''
Model: "sequential_5"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten_5 (Flatten)          (None, 4)                 0         
_________________________________________________________________
dense_138 (Dense)            (None, 128)               640       
_________________________________________________________________
dense_139 (Dense)            (None, 64)                8256      
_________________________________________________________________
dense_140 (Dense)            (None, 32)                2080      
_________________________________________________________________
dense_141 (Dense)            (None, 3)                 99        
=================================================================
Total params: 11,075
Trainable params: 11,075
Non-trainable params: 0
_________________________________________________________________
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'>
Train on 150 samples
150/150 [==============================] - 0s 761us/sample - loss: 1.0827 - acc: 0.2600
<tensorflow.python.keras.callbacks.History at 0x195855e0048>
'''


from sklearn.model_selection import cross_val_score
cross_val_score(KerasClassifier(bind_fn, epochs=1), iris.iloc[:,:-1], pd.get_dummies(iris.species), cv=10)
'''
array([0.46666667, 0.        , 0.        , 0.        , 0.        ,
       0.        , 0.        , 0.        , 0.26666668, 0.        ])
'''
flowers

Comments