python - TensorFlow 模型创建后抛出尺寸错误
问题描述
我有一个 110200x28 的数据框以 100x28 的方式(100 是一个时间步长)作为输入放入网络中以执行 1d 卷积并最终输出 3 个目标。所以我构建了以下模型:
#building model
def build_model():
model = models.Sequential()
model.add(layers.InputLayer(input_shape=(100,28)))
model.add(layers.Dense(28,activation = 'relu'))
model.add(BatchNormalization(momentum = 0.99))
model.add(Dropout(0.1))
model.add(layers.Conv1D(filters=16,kernel_size=3,strides=1,padding='same',activation='relu'))
model.add(BatchNormalization(momentum = 0.99))
model.add(Dropout(0.1))
model.add(layers.Conv1D(filters=32,kernel_size=3,strides=1,padding='same',activation='relu'))
model.add(BatchNormalization(momentum = 0.99))
model.add(Dropout(0.1))
model.add(layers.Conv1D(filters=64,kernel_size=3,strides=1,padding='same',activation='relu'))
model.add(BatchNormalization(momentum = 0.99))
model.add(Dropout(0.1))
#model.add(layers.Reshape((1,179200), input_shape=(100,28,64)))
model.add(layers.Flatten())
model.add(layers.Dense(3, activation = 'linear'))
model.compile(
optimizer='adam',
loss=['mean_squared_error'],
metrics=[tf.keras.metrics.RootMeanSquaredError()]
)
return model
model = build_model()
#train model and output
history = model.fit(
dataframes,
targets,
epochs=50,
#validation_data=(
# x_val,
# y_val
#),
callbacks=[keras.callbacks.EarlyStopping(
#monitor = 'val_loss',
patience = 4)
]
)
print(history.history)
但是当我按下运行它输出这个奇怪的错误:
ValueError Traceback (most recent call last)
<ipython-input-77-338e16e136c3> in <module>
41 callbacks=[keras.callbacks.EarlyStopping(
42 #monitor = 'val_loss',
---> 43 patience = 4)
44 ]
45 )
~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)
1152 sample_weight=sample_weight,
1153 class_weight=class_weight,
-> 1154 batch_size=batch_size)
1155
1156 # Prepare validation data.
~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
577 feed_input_shapes,
578 check_batch_axis=False, # Don't enforce the batch size.
--> 579 exception_prefix='input')
580
581 if y is not None:
~\Anaconda3\envs\deeplearning\lib\site-packages\keras\engine\training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
133 ': expected ' + names[i] + ' to have ' +
134 str(len(shape)) + ' dimensions, but got array '
--> 135 'with shape ' + str(data_shape))
136 if not check_batch_axis:
137 data_shape = data_shape[1:]
ValueError: Error when checking input: expected input_26 to have 3 dimensions, but got array with shape (110200, 28)
现在根据我的理解,第三维应该在那里,因为它是批量大小并且由程序自动给出。你能帮我找出问题所在吗?
解决方案
dataframes.reshape(dataframes.shape[0],dataframes.shape[1], 1) # add this line
#train model and output
history = model.fit(
dataframes,
targets,
epochs=50,
#validation_data=(
# x_val,
# y_val
#),
callbacks=[keras.callbacks.EarlyStopping(
#monitor = 'val_loss',
patience = 4)
]
)
print(history.history)
您的模型需要 3d 数据,因此请在最后添加一个额外的维度。
推荐阅读
- ios - 使用自定义类将阴影与渐变颜色一起应用
- python - 如何仅在熊猫中查看选定案例的前一行的值
- android - 如何将日期和时间保存到特定按钮?
- php - 为 PHP API 函数传递多个值
- arrays - .NET 字符串编码问题
- react-native - react-native 中的切换按钮
- r - scale_colour_grey() 不允许覆盖图例标签,而是同时显示新旧标签
- regex - 正则表达式按新行拆分字符串,还包括空行新行
- ruby-on-rails - 无法启动 postgresql 服务器 [无法绑定 IPv4 套接字:权限被拒绝]
- delphi - TWebBrowser 处理关闭请求