# 依赖
import tensorflow as tf
from sklearn.decomposition import PCA
import numpy as np
# 数据源
# 第一条线
x1 =[(1,2),(3,4),(5,6),(7,8)]
# 第二条线
x2 =[(9,10),(11,12),(13,14),(15,16)]
# 降维源数据
x = x1 + x2
x = np.array(x)
print(x)
[[ 1 2]
[ 3 4]
[ 5 6]
[ 7 8]
[ 9 10]
[11 12]
[13 14]
[15 16]]
pca = PCA(n_components=1)
y = pca.fit_transform(x)
# 使用一维数据表示二维的画笔点数据
print(y)
[[ 9.89949494]
[ 7.07106781]
[ 4.24264069]
[ 1.41421356]
[-1.41421356]
[-4.24264069]
[-7.07106781]
[-9.89949494]]
# 编码模型
# 原画笔数据
x_train = [[[1,2],[3,4],[5,6],[7,8]],[[9,10],[11,12],[13,14],[15,16]]]
# 降维丢弃后的数据
y_train = [[[9.89949494],[1.41421356]],[[-1.41421356],[-9.89949494]]]
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(4, 2)),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(16, activation='relu'),
tf.keras.layers.Dense(2, activation='relu'),
tf.keras.layers.Reshape((2,1))
])
print(model.output_shape)
print(model.input_shape)
model.compile(
optimizer='adam',
loss='mse',
metrics=['mae', 'mse']
)
model.fit(x_train, y_train, epochs=100,batch_size=1)
z = [[(1,2),(3,4),(5,6),(7,8)]]
train_datas = np.asarray(z)
predictions= model.predict(train_datas)
print(predictions)
[[[9.896617]
[0. ]]]
# 将原数据 [[(1,2),(3,4),(5,6),(7,8)]] 压缩成[[[9.896617][0.]]]
# 解码模型
# 压缩后数据
x_train = [[[9.89949494],[1.41421356]],[[-1.41421356],[-9.89949494]]]
# 还原的数据
y_train = [[[1,2],[3,4],[5,6],[7,8]],[[9,10],[11,12],[13,14],[15,16]]]
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(2, 1)),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(16, activation='relu'),
tf.keras.layers.Dense(8, activation='relu'),
tf.keras.layers.Reshape((4,2))
])
print(model.output_shape)
print(model.input_shape)
model.compile(
optimizer='adam',
loss='mse',
metrics=['mae', 'mse']
)
model.fit(x_train, y_train, epochs=100,batch_size=1)
z = [[[9.896617],[0]]]
train_datas = np.asarray(z)
predictions= model.predict(train_datas)
print(predictions)
[[[1.1542983 0. ]
[3.2397153 4.428882 ]
[0. 6.42444 ]
[7.5104036 8.566071 ]]]
# 将压缩后的数据 [[[9.896617],[0]]]还原成[[[1.1542983 0.][3.2397153 4.428882 ][0. 6.42444][7.5104036 8.566071]]]
复制