简体   繁体   中英

Convert Pytorch MLP Class to Tensorflow MLP class

I have the question on how to convert a Pytorch Neural Network to a Tensorflow Neural Network. The TF class as its written below does not work and I assume its die to the difference between nn.Sequential and tf.keras.Sequential.

class FullyConnected(nn.Sequential):

"""
Fully connected multi-layer network with ELU activations.
"""

def __init__(self, sizes, final_activation=None):
    layers = []
    for in_size, out_size in zip(sizes, sizes[1:]):
        layers.append(nn.Linear(in_size, out_size))
        layers.append(nn.ELU())
    layers.pop(-1)
    if final_activation is not None:
        layers.append(final_activation)
    super().__init__(*layers) here




class FullyConnected(tf.keras.Sequential):
"""
Fully connected multi-layer network with ELU activations.
"""
def __init__(self, sizes, final_activation=None):
    layers = []
    for out_size in sizes[1:-1]:
        layers.append(Dense(units=out_size, activation='elu'))
    if final_activation is not None:
        layers.append(Dense(units=sizes[-1], activation='elu'))
    else:
        layers.append(Dense(units=sizes[-1]))
    super().__init__(*layers)

If I try to initialize the network say by self.fc = FullyConnected(sizes=(sizes[:-1] + [self.dim * 2])) with sizes = [1, 128, 128, 128, 1] I get the Error: TypeError: object.__init__() takes exactly one argument (the instance to initialize) when using the TF network.

Can somebody help?

Many thanks in advance!!

I built a 4 layer keras network outputting a binary classification. tanh seemed to perform better.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.metrics import classification_report,confusion_matrix
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Model
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

batch_size=673
data = np.random.rand(batch_size, 25)
#for item in data:
#    print(item)
label = np.random.randint(0,2,(batch_size,1))
#print(data)
df=pd.DataFrame(data)
df2=pd.DataFrame(label,columns=["Target"])
df=pd.concat([df,df2],axis=1)
#print(df)

columns=[x for x in df.columns if x!="Target"]
X=df[columns]
y=df["Target"]


X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.3, random_state=42)
scaler = StandardScaler()
scaler.fit(X_train)
X_train=scaler.transform(X_train)
X_test=scaler.transform(X_test)

model= Sequential()

model.add(Dense(25, input_shape=(25,),activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

#model.compile(optimizer=Adam(0.01),loss='binary_crossentropy')
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.001), metrics=['accuracy'])

model.summary()

history=model.fit(X_train, y_train,epochs = 100,verbose=0)

model.evaluate(X_test, y_test)

plt.plot(history.history['accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM