【问题标题】:Convert Pytorch MLP Class to Tensorflow MLP class将 Pytorch MLP 类转换为 Tensorflow MLP 类
【发布时间】:2022-01-29 04:00:13
【问题描述】:

我有一个关于如何将 Pytorch 神经网络转换为 Tensorflow 神经网络的问题。下面写的 TF 类不起作用,我认为它与 nn.Sequential 和 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)

如果我尝试通过self.fc = FullyConnected(sizes=(sizes[:-1] + [self.dim * 2]))sizes = [1, 128, 128, 128, 1] 初始化网络,我在使用TF 网络时收到错误:TypeError: object.__init__() takes exactly one argument (the instance to initialize)

有人可以帮忙吗?

提前非常感谢!!

【问题讨论】:

  • 我的输入大小为“torch.Size([673, 25])”。对于测试,可以使用随机值。

标签: python tensorflow pytorch


【解决方案1】:

我构建了一个输出二进制分类的 4 层 keras 网络。 tanh 似乎表现更好。

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()

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 2022-11-18
    • 2017-02-10
    • 1970-01-01
    • 2017-09-07
    • 2020-11-17
    • 1970-01-01
    • 2016-03-04
    • 2018-10-20
    相关资源
    最近更新 更多