Пример #1
0
db_test = db_test.map(preprocess).batch(batchSize)

model = Sequential([
    layers.Dense(768, activation=tf.nn.relu),
    layers.Dense(512, activation=tf.nn.relu),
    layers.Dense(384, activation=tf.nn.relu),
    layers.Dense(256, activation=tf.nn.relu),
    layers.Dense(192, activation=tf.nn.relu),
    layers.Dense(128, activation=tf.nn.relu),
    layers.Dense(96, activation=tf.nn.relu),
    layers.Dense(64, activation=tf.nn.relu),
    layers.Dense(42, activation=tf.nn.relu),
    layers.Dense(32, activation=tf.nn.relu),
    layers.Dense(10)
])
model.build(input_shape=[None, inputShape])
model.summary()

optimizer = optimizers.Adam(lr=1e-3)

lossMean = metrics.Mean()
accuracy = metrics.Accuracy()


def main():
    for epoch in range(20):
        for step, (x, y) in enumerate(db):
            x = tf.reshape(x, (-1, inputShape))
            y_onehot = tf.one_hot(y, depth=10)
            with tf.GradientTape() as tape:
                logits = model(x)
Пример #2
0
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics

(xs, ys), _ = datasets.mnist.load_data()
print('datasets:', xs.shape, ys.shape, xs.min(), xs.max())

xs = tf.convert_to_tensor(xs, dtype=tf.float32) / 255.
db = tf.data.Dataset.from_tensor_slices((xs, ys))
db = db.batch(32).repeat(10)

network = Sequential([
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(10)
])
network.build(input_shape=(None, 28 * 28))
network.summary()

optimizer = optimizers.SGD(lr=0.01)
acc_meter = metrics.Accuracy()

for step, (x, y) in enumerate(db):

    with tf.GradientTape() as tape:
        # [b, 28, 28] => [b, 784]
        x = tf.reshape(x, (-1, 28 * 28))
        # [b, 784] => [b, 10]
        out = network(x)
        # [b] => [b, 10]
        y_onehot = tf.one_hot(y, depth=10)
        # [b, 10]
Пример #3
0
# x = tf.constant([2.,1.,0.1])#创建输入张量
# layer = layers.Softmax(axis = -1)#创建Softmax层
# out = layer(x)#调用softmax前向计算,输出为out
# #经过Softmax网络层后,得到概率分布out
# out = tf.nn.softmax(x)#调用softmax函数完成前向计算

#网络容器
#例如,2层的全连接层加上单独的激活函数层,可以通过Sequential容器封装为一个网络
#导入Sequential容器
from tensorflow.keras import layers,Sequential 
network = Sequential([ #封装为一个网络
    layers.Dense(3,activation=None),#全连接层,此处不使用激活函数
    layers.ReLU(),#激活函数层
    layers.Dense(2,activation=None),#全连接层,此处不使用激活函数
    layers.ReLU()#激活函数层
])
x = tf.random.normal([4,3])
out = network(x) #输入从第一层开始,逐层传播至输出层,并返回输出层的输出
#Sequential容器也可以通过add()方法继续追加新的网络层,实现动态创建网络的功能
layers_num = 2#堆叠2次
network = Sequential([])#先创建空的网络容器
for _in range(layers_num):
    network.add(layers.Dense(3))#添加全连接层
    network.add(layers.ReLU())#添加激活函数层
network.build(input_shape=(4,4))#创建网络参数
network.summary()

#打印网络的待优化参数名与shape
for p in network.trainable_variables:
    print(p.name,p.shape)#参数名和形状
    
Пример #4
0
(xs, ys), _ = datasets.mnist.load_data()
print('datasets:', xs.shape, ys.shape, xs.min(), xs.max())

batch_size = 32

xs = tf.convert_to_tensor(xs, dtype=tf.float32) / 255.
db = tf.data.Dataset.from_tensor_slices((xs, ys))
db = db.batch(batch_size).repeat(30)

model = Sequential([
    layers.Dense(256, activation='relu'),
    layers.Dense(128, activation='relu'),
    layers.Dense(10)
])
model.build(input_shape=(4, 28 * 28))
model.summary()
optimizers = optimizers.SGD(lr=0.01)
acc_meter = metrics.Accuracy()

for step, (x, y) in enumerate(db):
    with tf.GradientTape() as tap:
        x = tf.reshape(x, (-1, 28 * 28))
        out = model(x)
        y_onehot = tf.one_hot(y, depth=10)
        loss = tf.square(out - y_onehot)
        loss = tf.reduce_sum(loss) / x.shape[0]

    acc_meter.update_state(tf.argmax(out, axis=1), y)

    grads = tap.gradient(loss, model.trainable_variables)
Пример #5
0
    layers.Conv2D(192,
                  kernel_size=3,
                  strides=1,
                  padding=[[0, 0], [1, 1], [1, 1], [0, 0]],
                  activation='relu'),  # 13*13*192
    # 第四层
    layers.Conv2D(192,
                  kernel_size=3,
                  strides=1,
                  padding=[[0, 0], [1, 1], [1, 1], [0, 0]],
                  activation='relu'),  # 13*13*192
    # 第五层
    layers.Conv2D(128,
                  kernel_size=3,
                  strides=1,
                  padding=[[0, 0], [1, 1], [1, 1], [0, 0]],
                  activation='relu'),  # 13*13*128
    layers.MaxPooling2D(pool_size=3, strides=2),  # 6*6*128
    layers.Flatten(),  # 6*6*128=4608
    # 第六层
    layers.Dense(1024, activation='relu'),
    layers.Dropout(rate=0.5),
    # 第七层
    layers.Dense(128, activation='relu'),
    layers.Dropout(rate=0.5),
    # 第八层(输出层)
    layers.Dense(5)
])
network.build(input_shape=(32, 224, 224, 3))  # 设置输入格式
network.summary()  # 显示出每层的待优化参数量
Пример #6
0
x_train = x_train.reshape((-1, 28, 28, 1))
x_test = x_test.reshape((-1, 28, 28, 1))

x_train = x_train / 255.
x_test = x_test / 255.

model = Sequential([
    layers.Conv2D(16, (3, 3), activation='relu'),
    layers.MaxPool2D((2, 2)),
    layers.Conv2D(32, (3, 3), activation='relu'),
    layers.MaxPool2D((2, 2)),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(32, activation='relu'),
    layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.build(input_shape=(None, 28, 28, 1))
model.summary()

history = model.fit(x_train, y_train, epochs=10)

test_loss = model.evaluate(x_test, y_test)
print(test_loss)

tf.saved_model.save(model, "saved/1")
Пример #7
0
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, Sequential, losses, optimizers, datasets

# 获取所有 GPU 设备列表
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        # 设置 GPU 显存占用为按需分配,增长式,默认会占用全部显存
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
    except RuntimeError as e:
        # 异常处理
        print(e)

# 创建 4 层全连接网络
model = Sequential([
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(256, activation='relu'),
    layers.Dense(10),
])
# build 模型,并打印模型信息
model.build(input_shape=(4, 784))
model.summary()
Пример #8
0
    layers.Conv2D(64,
                  kernel_size=[3, 3],
                  padding="same",
                  activation=tf.nn.relu),
    layers.Conv2D(64,
                  kernel_size=[3, 3],
                  padding="same",
                  activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=[2, 2], strides=2, padding="same"),
    layers.Flatten(),
    layers.Dense(512, activation=tf.nn.relu),
    layers.Dropout(rate=0.5),
    layers.Dense(2, activation=None)
]
my_net = Sequential(my_layers)
my_net.build(input_shape=[None, 64, 64, 3])
my_net.summary()
optimizer = optimizers.Adam(lr=1e-3)

acc_best = 0
patience_num = 10
no_improved_num = 0
for epoch in range(50):
    for step, (x, y) in enumerate(db_train):
        with tf.GradientTape() as tape:
            out = my_net(x)
            # print('out', out.shape)
            logits = out
            y_onehot = tf.one_hot(y, depth=2)
            loss = tf.losses.categorical_crossentropy(y_onehot,
                                                      logits,
Пример #9
0
                     
                        ])

net_batch= Sequential([ layers.Dropout(0.5), 
                     
                        layers.BatchNormalization()])

net_LSTM = Sequential([layers.LSTM(64, dropout=0.5, return_sequences=True, unroll=True),
            
                       layers.LSTM(64, dropout=0.5, unroll=True)
                     
                        ])
net_Dense=Sequential([layers.Dense(1)])
optimizer = optimizers.Adam(lr=1e-3)

net_embedding.build(input_shape=[None, 80])
net_conv.build(input_shape=[None, 80,100,1])
net_batch.build(input_shape=[None, 78,1,126])
net_LSTM.build(input_shape=[None, 78,126])
net_Dense.build(input_shape=[None, 64])

variables_Dense_Conv = net_Dense.trainable_variables + net_conv.trainable_variables
variables = net_embedding.trainable_variables + net_conv.trainable_variables + net_LSTM.trainable_variables + net_Dense.trainable_variables + net_batch.trainable_variables

for epoch in range(100):
     for step, (x, y) in enumerate(db_train):
        with tf.GradientTape() as tape:
            y=tf.cast(y,dtype=tf.float32)
            y=tf.expand_dims(y,axis=-1)
            
            out1=net_embedding(x)
Пример #10
0
print(train_inputs.shape)

#%%
### 신경망 학습을 위한 모듈 가져오기
import tensorflow as tf
from tensorflow.keras import datasets, layers, Sequential

#%%
# 모델 만들기
model = Sequential()
model.add(layers.Dense(40, activation='relu'))
model.add(layers.Dense(50, activation='relu'))
model.add(layers.Dense(40, activation='relu'))
model.add(layers.Dense(30, activation='relu'))
model.add(layers.Dense(len(labels), activation='softmax'))
model.build(input_shape=(None, 40))
model.summary()

#%%
# 훈련 시작
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

model.fit(train_inputs, label_inputs, epochs=500)

#%%
# 모델 평가
test_loss, test_acc = model.evaluate(train_inputs,  label_inputs, verbose=2)
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers,Sequential


network=Sequential([layers.Dense(600,activation='relu'),
                   #layers.Dense(1200,activation='relu'),
                   #layers.Dense(1200,activation='relu'),
                   layers.Dense(600,activation='relu'),
                   layers.Dense(300,activation='relu'),
                   layers.Dense(6)])
network.build(input_shape=[None,150])
network.load_weights('.//weight/')

def GetValue(x):
    x=tf.reshape(x,[-1,150])
    out=network(x)
    out=tf.nn.softmax(out,axis=1)
    out=tf.argmax(out,axis=1)
    out=tf.cast(out,dtype=tf.int32)
    return int(out)

Пример #12
0
(train_images, train_labels), (test_images,
                               test_labels) = datasets.mnist.load_data()
train_images = train_images.reshape(60000, 28 * 28).astype('float32') / 255.0
test_images = test_images.reshape(10000, 28 * 28).astype('float32') / 255.0
# 对标签进行分类编码
train_labels = tf.keras.utils.to_categorical(train_labels)
test_labels = tf.keras.utils.to_categorical(test_labels)

# 2、构建模型(顺序)
model = Sequential([
    Dense(256, activation='relu'),
    Dense(128, activation='relu'),
    Dense(28, activation='relu'),
    Dense(10, activation='softmax')
])
model.build(input_shape=(None, 28 * 28))
# 3、编译模型
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['acc'])
# 4、拟合模型
history = model.fit(train_images,
                    train_labels,
                    epochs=50,
                    batch_size=512,
                    validation_data=(test_images, test_labels))
# 5、评估模型
model.evaluate(test_images, test_labels)

# 6、保存权重
os.remove('./mnist_model.h5')
Пример #13
0
                      activation='relu',
                      input_shape=(MAX_LEN, WORD_DEPTH)))

    model.add(layers.MaxPool1D())

    model.add(layers.Dropout(0.5))

    #Not in original model, but I need 1 d output

    model.add(layers.Flatten())

    model.add(layers.Dense(100))

    model.add(layers.Dense(1))

    model.build()

    model.compile(optimizer=keras.optimizers.Adadelta(),
                  loss=losses.MeanSquaredError())

print("Model built, training model. See ya in a few years")

symbols = [equity['symbol'] for equity in fh_client.stock_symbols('US')]
print("Train")
#Create Data
for symbol in symbols:
    try:
        fin_data = fh_client.financials(symbol, 'ic',
                                        freq='quarterly')['financials'][:39]
        eps_estimates = fh_client.company_eps_estimates(
            symbol, freq='quarterly')['data'][9:(39 + 8)]
Пример #14
0
def main():
    # 利用前面创建的层列表构建网络容器
    conv_net = Sequential(conv_layers)

    # 创建3层全连接层子网络
    fc_net = Sequential([
        layers.Dense(256, activation=tf.nn.relu),
        layers.Dense(128, activation=tf.nn.relu),
        layers.Dense(10, activation=None)
    ])

    # build 2个子网络,并打印网络参数信息
    conv_net.build(input_shape=[None, 32, 32, 3])
    fc_net.build(input_shape=[None, 512])
    conv_net.summary()
    fc_net.summary()
    optimizer = optimizers.Adam(lr=1e-4)

    # 列表合并,合并2个子网络的参数
    variables = conv_net.trainable_variables + fc_net.trainable_variables

    for epoch in range(50):

        for step, (_x, _y) in enumerate(train_db):

            with tf.GradientTape() as tape:
                # [b, 32, 32, 3] => [b, 1, 1, 512]
                out = conv_net(_x)
                # flatten, => [b, 512]
                out = tf.reshape(out, [-1, 512])
                # [b, 512] => [b, 10]
                logits = fc_net(out)
                # [b] => [b, 10]
                y_onehot = tf.one_hot(_y, depth=10)
                # compute loss
                loss = tf.losses.categorical_crossentropy(y_onehot,
                                                          logits,
                                                          from_logits=True)
                loss = tf.reduce_mean(loss)

            # 对所有参数求梯度
            grads = tape.gradient(loss, variables)
            optimizer.apply_gradients(zip(grads, variables))

            if step % 100 == 0:
                print(epoch, step, 'loss:', float(loss))

        total_num = 0
        total_correct = 0
        for _x, _y in test_db:
            out = conv_net(_x)
            out = tf.reshape(out, [-1, 512])
            logits = fc_net(out)
            prob = tf.nn.softmax(logits, axis=1)
            pred = tf.argmax(prob, axis=-1)
            pred = tf.cast(pred, dtype=tf.int32)

            correct = tf.cast(tf.equal(pred, _y), dtype=tf.int32)
            correct = tf.reduce_sum(correct)

            total_num += _x.shape[0]
            total_correct += int(correct)

        acc = total_correct / total_num
        print(epoch, 'acc:', acc)
from tensorflow.keras import Sequential
network = Sequential([ # 网络容器
    layers.Conv2D(6,kernel_size=3,strides=1), # 第一个卷积层, 6个3x3卷积核
    layers.MaxPooling2D(pool_size=2,strides=2), # 高宽各减半的池化层
    layers.ReLU(), # 激活函数
    layers.Conv2D(16,kernel_size=3,strides=1), # 第二个卷积层, 16个3x3卷积核
    layers.MaxPooling2D(pool_size=2,strides=2), # 高宽各减半的池化层
    layers.ReLU(), # 激活函数
    layers.Flatten(), # 打平层,方便全连接层处理

    layers.Dense(120, activation='relu'), # 全连接层,120个节点
    layers.Dense(84, activation='relu'), # 全连接层,84节点
    layers.Dense(10) # 全连接层,10个节点
                    ])
# build一次网络模型,给输入X的形状,其中4为随意给的batchsz
network.build(input_shape=(4, 28, 28, 1))
# 统计网络信息
network.summary()


# %%
# 导入误差计算,优化器模块
from tensorflow.keras import losses, optimizers
# 创建损失函数的类,在实际计算时直接调用类实例即可
criteon = losses.CategoricalCrossentropy(from_logits=True)
optimizer = optimizers.Adam()

# %%
# 构建梯度记录环境
with tf.GradientTape() as tape:
    print(x.shape) 
Пример #16
0
net = Sequential([
    layers.Conv2D(6, kernel_size=3, strides=1),
    layers.BatchNormalization(),
    layers.MaxPooling2D(pool_size=2, strides=2),
    layers.ReLU(),
    layers.Conv2D(16, kernel_size=3, strides=1),
    layers.BatchNormalization(),
    layers.MaxPooling2D(pool_size=2, strides=2),
    layers.ReLU(),
    layers.Flatten(),

    layers.Dense(120, activation='relu'),
    layers.Dense(84, activation='relu'),
    layers.Dense(10)
])
net.build(input_shape=(None, 28, 28, 1))

criterion = losses.CategoricalCrossentropy(from_logits=True)
optimizer = optimizers.Adam(learning_rate=1e-3)
loss_meter = metrics.Mean()
acc_meter = metrics.Accuracy()

for epoch in range(10):
    for step, (x, y) in enumerate(train_db):
        with tf.GradientTape() as tape:
            x = tf.expand_dims(x, axis=3)
            out = net(tf.cast(x, dtype=tf.float32), training=True)
            y_onehot = tf.one_hot(
                tf.cast(y, dtype=tf.int32),depth=10
            )
            loss = criterion(y_onehot, out)
Пример #17
0
import tensorflow as tf
from tensorflow.keras import Sequential

from hanser.models.layers import Conv2d, Act, Norm, set_defaults

set_defaults({
    'weight_decay': 1e-4,
})

m = Sequential([
    Conv2d(3, 32, 3, norm='def'),
    Act(name='act1'),
    Conv2d(32, 32, 3, stride=1, bias=False, name='depthwise1'),
    Conv2d(32, 32, 1, bias=False, name='pointwise1'),
    Norm(32, name='norm1'),
])

m.build((None, 32, 32, 3))
len(m.losses)
db_test = db_test.map(preprocess).batch(batchsz)

sample = next(iter(db))
print(sample[0].shape, sample[1].shape)

network = Sequential([
    layers.Dense(256, activation='relu'),
    layers.Dropout(0.5),
    # layers.Dense(64, activation='relu'),
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(32, activation='relu'),
    layers.Dense(10, activation='relu'),
    layers.Dense(2)
])
network.build(input_shape=(None, 2080))
network.summary()

network.compile(optimizer=optimizers.Adam(lr=0.001),
                loss=tf.losses.CategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])

network.fit(db, epochs=40, validation_data=ds_val, validation_steps=2)

network.evaluate(db_test)

# sample = next(iter(db_test))
# x = sample[0]
# y = sample[1]  # one-hot
# pred = network.predict(x)  # [b, 10]
# # convert back to number
    # fourth layer
    layers.Conv2D(192, kernel_size=3, strides=1, padding=[[0, 0], [1, 1], [1, 1], [0, 0]], activation='relu'),  # 13*13*192
    # fifth layer
    layers.Conv2D(128, kernel_size=3, strides=1, padding=[[0, 0], [1, 1], [1, 1], [0, 0]], activation='relu'),  # 13*13*128
    layers.MaxPooling2D(pool_size=3, strides=2),  # 6*6*128
    layers.Flatten(),  # 6*6*128=4608
    # 6th layer
    layers.Dense(1024, activation='relu'),
    layers.Dropout(rate=0.5),
    # 7th layer
    layers.Dense(128, activation='relu'),
    layers.Dropout(rate=0.5),
    # 8th layer(output)
    layers.Dense(5)  
])
network.build(input_shape=(32, 224, 224, 3))  
network.summary()


# In[ ]:


# training
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.9)
with tf.Session(config=tf.ConfigProto(gpu_options=gpu_options,log_device_placement=True),graph=detection_graph) as sess:
with tf.device("/gpu:0"):

optimizer = optimizers.SGD(lr=0.01)  # Batch Gradient Descent Learning rate=0.01
Пример #20
0
# write by Mrlv
# coding:utf-8
import tensorflow as tf
from tensorflow.keras import layers, Sequential
import pandas as pd

a = tf.random.uniform([4, 256], maxval=50)
model = Sequential([
    layers.Dense(128, activation='relu'),
    layers.Dense(64, activation='relu'),
    layers.Dense(10)
])
model.build([None, 256])
model.summary()
for p in model.variables:
    print(p.name, p.shape)
Пример #21
0
from tensorflow.keras import losses, optimizers

network = Sequential([  # 网络容器
    layers.Conv2D(6, kernel_size=3, strides=1),  # 第一个卷积层, 6 个 3x3 卷积核
    layers.MaxPooling2D(pool_size=2, strides=2),  # 高宽各减半的池化层
    layers.ReLU(),  # 激活函数
    layers.Conv2D(16, kernel_size=3, strides=1),  # 第二个卷积层, 16 个 3x3 卷积核
    layers.MaxPooling2D(pool_size=2, strides=2),  # 高宽各减半的池化层
    layers.ReLU(),  # 激活函数
    layers.Flatten(),  # 打平层,方便全连接层处理
    layers.Dense(120, activation='relu'),  # 全连接层,120 个节点
    layers.Dense(84, activation='relu'),  # 全连接层,84 节点
    layers.Dense(10)  # 全连接层,10 个节点
])
# build 一次网络模型,给输入 X 的形状,其中 4 为随意给的 batchsz10.4 LeNet-5 实战
network.build(input_shape=(4, 28, 28, 1))
# 统计网络信息
network.summary()

# 创建损失函数的类,在实际计算时直接调用类实例即可
criteon = losses.CategoricalCrossentropy(from_logits=True)
# 构建梯度记录环境
with tf.GradientTape() as tape:
    # 插入通道维度,=>[b,28,28,1]
    x = tf.expand_dims(x, axis=3)
    # 前向计算,获得 10 类别的概率分布,[b, 784] => [b, 10]
    out = network(x)
    # 真实标签 one-hot 编码,[b] => [b, 10]
    y_onehot = tf.one_hot(y, depth=10)
    # 计算交叉熵损失函数,标量
    loss = criteon(y_onehot, out)
Пример #22
0
def main():
    # 输入:[b, 32, 32, 3]
    model = ResNet18()
    # model = resnet1.ResNet([2, 2, 2], 10)
    model.build(input_shape=(None, 32, 32, 3))
    model.summary()

    mydense = layers.Dense(100, activation=None)
    fc_net = Sequential([mydense])
    fc_net.build(input_shape=(None, 512))
    fc_net.summary()

    lr = 0.1
    optimizer = optimizers.SGD(lr=lr, momentum=0.9, decay=5e-4)
    variables = model.trainable_variables + fc_net.trainable_variables
    for epoch in range(500):

        for step, (x, y) in enumerate(train_db):
            with tf.GradientTape() as tape:
                # [b, 32, 32, 3] => [b, 100]
                out = model(x, training=True)
                avgpool = layers.GlobalAveragePooling2D()(out)
                logits = fc_net(avgpool)
                y_onehot = tf.one_hot(y, depth=100)
                # 多类别交叉熵损失   结果维度[b]
                loss = tf.reduce_mean(
                    tf.losses.categorical_crossentropy(y_onehot,
                                                       logits,
                                                       from_logits=True))
                # 添加正则项,所有可以训练的权重添加l2正则项
                loss_regularization = []
                for p in variables:
                    loss_regularization.append(tf.nn.l2_loss(p))
                loss_regularization = tf.reduce_sum(
                    tf.stack(loss_regularization))
                loss = loss + 5e-4 * loss_regularization

            # 梯度求解
            grads = tape.gradient(loss, variables)
            # 梯度更新
            optimizer.apply_gradients(zip(grads, variables))
            # 学习率动态调整
            lr = lr_schedule_200ep(epoch)
            # 每100个step打印一次
            if step % 100 == 0:
                print('epoch:', epoch, 'step:', step, 'loss:', float(loss),
                      'lr:', lr)

        # 做测试
        total_num = 0
        total_correct = 0
        for x, y in test_db:
            out = model(x, training=False)
            avgpool = layers.GlobalAveragePooling2D()(out)
            output = fc_net(avgpool)
            # 预测可能性。
            prob = tf.nn.softmax(output, axis=1)
            pred = tf.argmax(prob, axis=1)  # 还记得吗pred类型为int64,需要转换一下。
            pred = tf.cast(pred, dtype=tf.int32)
            # 拿到预测值pred和真实值比较。
            correct = tf.cast(tf.equal(pred, y), dtype=tf.int32)
            correct = tf.reduce_sum(correct)
            total_num += x.shape[0]
            total_correct += int(correct)  # 转换为numpy数据

        acc = total_correct / total_num
        print('epoch:', epoch, 'test_acc:', acc)
Пример #23
0
    # 单元5,输出通道提升道512,高宽大小减半
    layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),
    layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),
    layers.MaxPool2D(pool_size=[2, 2], strides=2, padding="same")
]

conv_net = Sequential(conv_layers)

fc_net = Sequential([
    layers.Dense(256, activation=tf.nn.relu),
    layers.Dense(128, activation=tf.nn.relu),
    layers.Dense(10, activation=tf.nn.relu)
])

conv_net.build(input_shape=[None, 32, 32, 3])
fc_net.build(input_shape=[None, 512])

optimizer = optimizers.Adam(lr=1e-4)

# 列表合并,合并2个子网络的参数
variables = conv_net.trainable_variables + fc_net.trainable_variables

for epoch in range(50):

    for step, (x, y) in enumerate(train_db):

        with tf.GradientTape() as tape:
            # [b, 32, 32, 3] => [b, 1, 1, 512]
            out = conv_net(x)
            # flatten, => [b, 512]
Пример #24
0
db = db.map(preprocess).shuffle(x.shape[0]).batch(batchSize)

db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.map(preprocess).batch(batchSize)

network = Sequential([
    layers.Dense(inputShape, activation=tf.sigmoid),
    layers.Dense(768, activation=tf.nn.relu),
    layers.Dense(512, activation=tf.nn.relu),
    layers.Dense(384, activation=tf.nn.relu),
    layers.Dense(256, activation=tf.nn.relu),
    layers.Dense(192, activation=tf.nn.relu),
    layers.Dense(128, activation=tf.nn.relu),
    layers.Dense(96, activation=tf.nn.relu),
    layers.Dense(64, activation=tf.nn.relu),
    layers.Dense(42, activation=tf.nn.relu),
    layers.Dense(32, activation=tf.nn.relu),
    layers.Dense(22, activation=tf.nn.relu),
    layers.Dense(10)
])
network.build(input_shape=[None, inputShape])
network.summary()

network.compile(optimizer=optimizers.Adam(lr=1e-3),
                loss=tf.losses.CategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])

network.fit(db, epochs=10, validation_data=db_test, validation_steps=1)

network.evaluate(db_test)
Пример #25
0
def main():
    # [b, 32, 32, 3] => [b, 1, 1, 512]
    conv_net = Sequential(conv_layers)

    fc_net = Sequential([
        layers.Dense(256, activation=tf.nn.relu),
        layers.Dense(128, activation=tf.nn.relu),
        layers.Dense(10, activation=None),
    ])

    conv_net.build(input_shape=[None, 32, 32, 3])
    fc_net.build(input_shape=[None, 512])
    conv_net.summary()
    fc_net.summary()
    optimizer = optimizers.Adam(lr=1e-4)

    # [1, 2] + [3, 4] => [1, 2, 3, 4]
    variables = conv_net.trainable_variables + fc_net.trainable_variables

    for epoch in range(50):

        for step, (x, y) in enumerate(train_db):

            with tf.GradientTape() as tape:
                # [b, 32, 32, 3] => [b, 1, 1, 512]
                out = conv_net(x)
                # flatten, => [b, 512]
                out = tf.reshape(out, [-1, 512])
                # [b, 512] => [b, 10]
                logits = fc_net(out)
                # [b] => [b, 10]
                y_onehot = tf.one_hot(y, depth=10)
                # compute loss
                loss = tf.losses.categorical_crossentropy(y_onehot,
                                                          logits,
                                                          from_logits=True)
                loss = tf.reduce_mean(loss)

            grads = tape.gradient(loss, variables)
            optimizer.apply_gradients(zip(grads, variables))

            if step % 100 == 0:
                print(epoch, step, "loss:", float(loss))

        total_num = 0
        total_correct = 0
        for x, y in test_db:
            out = conv_net(x)
            out = tf.reshape(out, [-1, 512])
            logits = fc_net(out)
            prob = tf.nn.softmax(logits, axis=1)
            pred = tf.argmax(prob, axis=1)
            pred = tf.cast(pred, dtype=tf.int32)

            correct = tf.cast(tf.equal(pred, y), dtype=tf.int32)
            correct = tf.reduce_sum(correct)

            total_num += x.shape[0]
            total_correct += int(correct)

        acc = total_correct / total_num
        print(epoch, "acc:", acc)
    layers.MaxPool2D([2, 2]), # 4x4

    layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),
    layers.Conv2D(512, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),
    layers.MaxPool2D([2, 2]), # 2x2

    # 转换形状
    # layers.Reshape((-1, 512), input_shape=(-1, 1, 1, 512)), # 这里加一个 Reshape层就好啦
    layers.Flatten(),

    layers.Dense(256, activation=tf.nn.relu),
    layers.Dense(128, activation=tf.nn.relu),
    layers.Dense(100, activation=None),
])

network.build(input_shape=[None, 32, 32, 3])
network.summary()

# 用 keras 的高层API直接训练
#network.compile(
#    optimizer=optimizers.Adam(lr=1e-4),
#    loss=tf.losses.categorical_crossentropy, # MSE 是个对象, CategoricalCrossentropy 是个类
#    metrics=['accuracy']
#)

network.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

network.fit(train_db, epochs=20, validation_data=test_db, validation_freq=2)
network.save('./model.h5')
Пример #27
0
print('batch:', sample[0].shape, sample[1].shape)

# 进行5层变换。构建出5层的全连接层
# sequential容器,可以将多个Dense层包含起来,可以逐次进行
model = Sequential([
    # x的shape=(b,784) w(784,256)
    # 第一层 输出维度是256,推断,kernel(即w)为[784, 256],这样x@w才是[b, 256]
    layers.Dense(256, activation=tf.nn.relu),  # [b, 784] -> [b,256]
    # 第一层 输出维度是128。kernel(即w)为[256, 128]
    layers.Dense(128, activation=tf.nn.relu),  # [b, 256] -> [b,128]
    layers.Dense(64, activation=tf.nn.relu),  # [b, 128] -> [b,64]
    layers.Dense(32, activation=tf.nn.relu),  # [b, 64] -> [b,32]
    layers.Dense(10)  # [b, 32] -> [b,10]
])
# 输入的维度,28*28=784,即和上面的第一层联系起来.此时就可以推断出w和b的shape
model.build(input_shape=[None, 28 * 28])
model.summary()  # 调试功能
'''
# -----  模型训练----

# 声明优化器
# 他的作用是更新优化参数,即w = w - lr*grad这样更新
optimizer = optimizers.Adam(lr=1e-3)


# 30次训练
for epoch in range(30):
 
    # 遍历数据集.由于db一共是60k个数据,而batch是128,所以一共循环60k/128次
    for step, (x, y) in enumerate(db):
        # x:[b, 28, 28],其中b=128,因为batch是128
Пример #28
0
def main():
    conv_net = Sequential([conv_layers])
    conv_net.build(input_shape=[None, 32, 32, 3])
    x = tf.random.normal([4, 32, 32, 3])
    out = conv_net(x)
    print(out.shape)
Пример #29
0
db = db.map(preprocess).shuffle(60000).batch(batchsz).repeat(10)

db_val = tf.data.Dataset.from_tensor_slices((x_val, y_val))
db_val = db_val.map(preprocess).batch(batchsz)

optimizer = optimizers.Adam(learning_rate=1e-3)

network = Sequential([layers.Dense(256, activation='relu'),
                      layers.Dropout(0.5),
                      layers.Dense(128, activation='relu'),
                      layers.Dropout(0.5),
                      layers.Dense(64, activation='relu'),
                      layers.Dense(32, activation='relu'),
                      layers.Dense(10)
                      ])
network.build(input_shape=[None, 28*28])
network.summary()

for step, (x, y) in enumerate(db):
    with tf.GradientTape() as tape:
        x = tf.reshape(x, [-1, 28*28])
        out = network(x, training=True)
        y_onehot = tf.one_hot(y, depth=10)
        loss = tf.reduce_sum(tf.losses.categorical_crossentropy(y_onehot, out, from_logits=True))
        loss_regularizaton = []
        for p in network.trainable_variables:
            loss_regularizaton.append(tf.nn.l2_loss(p))
        loss_regularizaton = tf.reduce_sum(loss_regularizaton)
        loss += 0.0001*loss_regularizaton
    grads = tape.gradient(loss, network.trainable_variables)
    optimizer.apply_gradients(zip(grads, network.trainable_variables))
Пример #30
0
def train322(trainx, trainy, testx, testy):
    conv_layers = [
        # layers.Conv2D(8, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),  # 卷积核数量,卷积核大小,填充方式,激活函数
        # layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
        # layers.Dropout(0.5),
        #
        #
        # layers.Conv2D(16, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),
        # layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),  # strides代表步长
        # layers.Dropout(0.5),
        #
        #
        # layers.Conv2D(32, kernel_size=[3, 3], padding="same", activation=tf.nn.relu),
        # layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
        # layers.Dropout(0.5),
        #设置卷积和池化层数,加入dropout层是防止过拟合
        layers.Conv2D(32,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),  # 卷积核数量,卷积核大小,填充方式,激活函数
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
        layers.Dropout(0.25),
        layers.Conv2D(32,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
        layers.Dropout(0.5),
        layers.Conv2D(64,
                      kernel_size=[3, 3],
                      padding="same",
                      activation=tf.nn.relu),
        layers.MaxPool2D(pool_size=[2, 2], strides=2, padding='same'),
        layers.Dropout(0.5),

        # 扁平化
        tf.keras.layers.Flatten(),
        layers.Dense(1024, activation=tf.nn.relu),  # 1024代表神经元的数量
        layers.Dense(20),  #根据所分类的类别数来确定参数的值
    ]

    net = Sequential(conv_layers)
    # 输入数据为(x, 28, 28, 1)
    # 构建
    net.build(input_shape=(None, 128, 128, 1))
    net.summary()

    # 设置模型训练方法
    net.compile(optimizer=optimizers.Adam(lr=0.001),
                loss=tf.losses.CategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])
    # 训练
    net.fit(trainx,
            trainy,
            batch_size=100,
            epochs=15,
            verbose=1,
            callbacks=[],
            validation_data=(testx, testy),
            shuffle=True)
    # 对模型进行评估
    net.evaluate(testx, testy)
    # 保存模型
    net.save('model/model.h5')
    # 保存参数
    net.save_weights('model/weights.ckpt')