keras XOR 实现

版本号 keras-1.0.7

实现1

from keras.optimizers import SGD
import numpy as np
from keras.layers import Input, merge
from keras.models import Model
from keras.layers.core import Flatten, Dense, Dropout



def get_top_model():
    sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
    input_lhs = Input(shape=(1,))
    input_rhs = Input(shape=(1,))
    # we can then concatenate the two vectors:
    merged_vector = merge([input_lhs, input_rhs], mode='concat', concat_axis=-1)
    # a layer instance is callable on a tensor, and returns a tensor
    x = Dense(64, activation='sigmoid')(merged_vector)
    x = Dense(64, activation='sigmoid')(x)
    predictions = Dense(1, activation='sigmoid')(x)

    # this creates a model that includes
    topModel = Model(input=[input_lhs, input_rhs], output=predictions)

    topModel.compile(optimizer=sgd,
                     loss='mean_squared_error',
                     metrics=['accuracy'])
    return topModel


if __name__ == "__main__":
    label_data = np.array(([0, 0, 1, 1]));
    topModel = get_top_model()
    topModel.fit([np.array([1,0,1,0]), np.array([1,0,0,1])], label_data, nb_epoch=10000, batch_size=4)
    print topModel.predict([np.array([1,0,1,0]), np.array([1,0,0,1])])

结果

[[ 0.01064401]
 [ 0.00852218]
 [ 0.99042308]
 [ 0.99032754]]
 ```


实现2
```python
import numpy as np
from keras.models import Sequential
from keras.layers.core import Activation, Dense
from keras.optimizers import SGD

X = np.zeros((4, 2), dtype='uint8')
y = np.zeros(4, dtype='uint8')

X[0] = [0, 0]
y[0] = 0
X[1] = [0, 1]
y[1] = 1
X[2] = [1, 0]
y[2] = 1
X[3] = [1, 1]
y[3] = 0

model = Sequential()
model.add(Dense(2, input_dim=2))
model.add(Activation('sigmoid'))
model.add(Dense(1))
model.add(Activation('sigmoid'))

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)

history = model.fit(X, y, nb_epoch=10000, batch_size=4, show_accuracy=True, verbose=2)

print model.predict(X)

结果

[[ 0.01088379]
[ 0.0088246 ]
[ 0.99008536]
[ 0.99009061]]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毛玻璃效果可以通过高斯模糊和随机化像素位置的方式实现,以下是使用Autoencoder实现毛玻璃效果的步骤: 1. 准备数据集:准备一些模糊的图像作为训练数据集。 2. 定义模型:使用Autoencoder模型,将输入图像压缩成一个低维的编码,再将编码解压缩成输出图像。 3. 训练模型:使用训练数据集训练Autoencoder模型。 4. 生成毛玻璃效果:将输入图像分成若干个小块,对每个小块进行高斯模糊和随机化像素位置的操作,然后输入到训练好的Autoencoder模型中进行重建,最后将所有小块拼接起来得到毛玻璃效果的图像。 以下是使用Python和Tensorflow实现毛玻璃效果的代码: ```python import tensorflow as tf import numpy as np import cv2 # 定义Autoencoder模型 class Autoencoder(tf.keras.Model): def __init__(self): super(Autoencoder, self).__init__() self.encoder = tf.keras.Sequential([ tf.keras.layers.Input(shape=(128, 128, 3)), tf.keras.layers.Conv2D(16, (3,3), activation='relu', padding='same', strides=2), tf.keras.layers.Conv2D(32, (3,3), activation='relu', padding='same', strides=2), tf.keras.layers.Conv2D(64, (3,3), activation='relu', padding='same', strides=2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dense(128, activation='relu'), ]) self.decoder = tf.keras.Sequential([ tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dense(4*4*64, activation='relu'), tf.keras.layers.Reshape((4, 4, 64)), tf.keras.layers.Conv2DTranspose(32, (3,3), activation='relu', padding='same', strides=2), tf.keras.layers.Conv2DTranspose(16, (3,3), activation='relu', padding='same', strides=2), tf.keras.layers.Conv2DTranspose(3, (3,3), activation='sigmoid', padding='same', strides=2), ]) def call(self, x): encoded = self.encoder(x) decoded = self.decoder(encoded) return decoded # 加载数据集 def load_dataset(): dataset = [] for i in range(1, 1001): img = cv2.imread(f'data/{i}.jpg') img = cv2.resize(img, (128, 128)) dataset.append(img) return np.array(dataset) # 高斯模糊和随机化像素位置 def blur_and_shuffle(img): img = cv2.GaussianBlur(img, (11,11), 0) h, w, c = img.shape mask = np.zeros((h, w), dtype=np.uint8) for i in range(h): for j in range(w): mask[i,j] = np.random.randint(0, 255) img = cv2.bitwise_xor(img, mask) return img # 生成毛玻璃效果 def generate_mosaic(img, model): h, w, c = img.shape mosaic_size = 32 mosaic_step = mosaic_size // 2 new_img = np.zeros((h, w, c), dtype=np.uint8) for i in range(0, h-mosaic_size+1, mosaic_step): for j in range(0, w-mosaic_size+1, mosaic_step): patch = img[i:i+mosaic_size, j:j+mosaic_size] patch = blur_and_shuffle(patch) patch = np.expand_dims(patch, axis=0) patch = patch.astype(np.float32) / 255.0 patch = model(patch) patch = patch.numpy()[0] * 255.0 patch = patch.astype(np.uint8) new_img[i:i+mosaic_size, j:j+mosaic_size] = patch return new_img # 加载数据集 dataset = load_dataset() # 创建模型 model = Autoencoder() # 训练模型 model.compile(optimizer='adam', loss='mse') model.fit(dataset, dataset, epochs=100) # 生成毛玻璃效果 img = cv2.imread('test.jpg') img = cv2.resize(img, (512, 512)) mosaic_img = generate_mosaic(img, model) cv2.imwrite('mosaic.jpg', mosaic_img) ``` 在上面的代码中,我们使用了一个包含三个卷积层和两个全连接层的Autoencoder模型来进行训练和重建。在生成毛玻璃效果时,我们将输入图像分成若干个大小为32x32的小块,对每个小块进行高斯模糊和随机化像素位置的操作,然后输入到训练好的Autoencoder模型中进行重建,最后将所有小块拼接起来得到毛玻璃效果的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值