用python写一个cnn代码,要求输入值为正弦函数值,体现每一步公式计算结果,输出结果图
时间: 2024-02-13 19:04:04 浏览: 72
以下是一个简单的1D CNN代码示例,使用Python和Keras库实现对正弦函数值的分类:
```python
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense
# 生成正弦函数数据
t = np.linspace(0, 2*np.pi, 1000)
x = np.sin(t)
y = np.zeros(1000)
y[:500] = 1
# 数据预处理
x = x.reshape(1, -1, 1)
y = y.reshape(-1, 1)
# 构建模型
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(1000, 1)))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(x, y, epochs=10, batch_size=32)
# 预测结果
y_pred = model.predict(x)
# 显示结果图
plt.plot(t, x[0, :, 0], label='input')
plt.plot(t, y, label='true output')
plt.plot(t, y_pred, label='predicted output')
plt.legend()
plt.show()
```
在上述代码中,首先生成一个正弦函数数据,并将其作为模型的输入,将前500个点标记为类别1,后500个点标记为类别0。然后使用Keras库构建了一个简单的1D CNN模型,其中包含一个卷积层、一个池化层和一个全连接层。模型使用二元交叉熵作为损失函数,使用Adam优化器进行参数优化,并训练了10个epoch。最后,将预测结果与真实结果一起绘制在图表中,显示了模型的分类效果。
阅读全文