我想在isolet数据集上训练一个网络,由6238个样本组成,每个样本有300个特征。你知道吗
这是我目前的代码:
import tensorflow as tf
import sklearn.preprocessing as prep
import numpy as np
import matplotlib.pyplot as plt
def main():
X, C, Xtst, Ctst = load_isolet()
#normalize
#X = (X - np.mean(X, axis = 1)[:, np.newaxis]) / np.std(X, axis = 1)[:, np.newaxis]
#Xtst = (Xtst - np.mean(Xtst, axis = 1)[:, np.newaxis]) / np.std(Xtst, axis = 1)[:, np.newaxis]
scaler = prep.MinMaxScaler(feature_range=(0,1))
scaledX = scaler.fit_transform(X)
scaledXtst = scaler.transform(Xtst)
# Build the tf.keras.Sequential model by stacking layers. Choose an optimizer and loss function for training:
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(X.shape[1], activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(26, activation='softmax')
])
ES_callback = tf.keras.callbacks.EarlyStopping(monitor='loss', min_delta=1e-2, patience=10, verbose=1)
initial_learning_rate = 0.01
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate,decay_steps=100000,decay_rate=0.9999,staircase=True)
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
history = model.fit(scaledX, C, epochs=100, callbacks=[ES_callback], batch_size = 32)
plt.figure(1)
plt.plot(range(len(history.history['loss'])), history.history['loss']);
plt.plot(range(len(history.history['accuracy'])), history.history['accuracy']);
plt.show()
到目前为止,我几乎已经转动了我所知道的每一个旋钮:
几乎所有我尝试过的东西都会给出奇怪的输出,损失值极高(取决于学习率),而且在学习过程中精确度很低。几乎所有时间段内,损失都在增加,但似乎与准确度值无关。你知道吗
对于代码,我遵循我得到的教程,但是有些东西是非常离谱的,因为我应该找到最好的超参数,但我不能找到任何好的东西。你知道吗
我很高兴得到一些要点,哪里的代码出错了,或者需要对数据进行不同的预处理。你知道吗
编辑:使用loss='categorical_crossentropy'
是给定的,所以至少这个应该是正确的。你知道吗
首先:
你的收敛问题可能是由于“错误的”损失函数。
tf.keras
支持各种损失,这取决于输入标签的形状。 尝试不同的可能性,比如tf.keras.losses.SparseCategoricalCrossentropy
如果标签是one-hot向量。tf.keras.losses.CategoricalCrossentropy
如果标签是1,2,3…或者
tf.keras.losses.BinaryCrossentropy
如果标签仅为0,1。你知道吗老实说,
tf.keras
的这一部分有点棘手,一些类似的设置可能需要调整。你知道吗第二,这部分:
假设
Xtst
是您的测试集,您希望根据您的训练集对其进行缩放。所以正确的比例应该是希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐