【发布时间】:2020-09-22 22:13:24
【问题描述】:
我有一个工作正常的现有 CNN 模型,代码如下。
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.InputLayer(input_shape=(train_data.shape[1], 1)))
model.add(tf.keras.layers.Conv1D(48, 48, activation=tf.nn.selu, padding='same'))
model.add(tf.keras.layers.MaxPool1D(2))
model.add(tf.keras.layers.Conv1D(48, 96, activation=tf.nn.selu, padding='same'))
model.add(tf.keras.layers.MaxPool1D(2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.keras.activations.relu))
model.add(tf.keras.layers.Dense(1, activation=tf.keras.activations.sigmoid))
model.compile(optimizer=tf.keras.optimizers.Adam(), loss=loss_function)
model.fit(train_data, train_result, epochs=2000, validation_split=0.2, verbose=0, callbacks=[early_stop])
train_data 是一组时间序列,其中每个序列都是一个 48 值向量。
我正在尝试使用keras-turner 优化超参数。参考https://github.com/keras-team/keras-tuner/blob/master/examples/cifar10.py 中的 CIFAR 示例,我将代码更改如下
def build_model(hp):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.InputLayer(input_shape=(train_data.shape[1], 1)))
# for i in range(hp.Int('conv_blocks', 3, 5, default=3)):
filters = hp.Int('filters_' + str(1), 12, 96, step=12)
for _ in range(2):
model.add(tf.keras.layers.Conv1D(filters, 3, activation=tf.nn.selu, padding='same'))
if hp.Choice('pooling_' + str(1), ['avg', 'max']) == 'max':
model.add(tf.keras.layers.MaxPool1D(2))
else:
model.add(tf.keras.layers.AvgPool1D(2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(hp.Int('hidden_size', 30, 100, step=10, default=50),
activation=tf.keras.activations.relu))
model.add(tf.keras.layers.Dropout(hp.Float('dropout', 0, 0.5, step=0.1, default=0.5)))
model.add(tf.keras.layers.Dense(2, activation=tf.keras.activations.softmax))
model.compile(optimizer=tf.keras.optimizers.Adam(hp.Float('learning_rate', 1e-4, 1e-2, sampling='log')),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
import kerastuner as kt
tuner = kt.Hyperband(build_model, objective='val_accuracy', max_epochs=30, hyperband_iterations=2)
tuner.search(train_data, validation_split=0.2, epochs=30, callbacks=[tf.keras.callbacks.EarlyStopping(patience=1)])
但是当我尝试运行时,出现以下错误。
ValueError: Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (176039, 48)
有人可以帮我弄清楚我在这里做错了什么吗?
【问题讨论】:
标签: python tensorflow conv-neural-network hyperparameters