[ML]keras和tensorflow实现同样的模型

import tensorflow as tf
from input_data import Data
import matplotlib.pyplot as plt
import os


data=Data("./data/")


X=tf.placeholder(tf.float32,[None,40,40,3])
y=tf.placeholder(tf.float32,[None,62])
keep_prob=tf.placeholder(tf.float32)

conv1_1=tf.layers.conv2d(X,filters=6,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
conv1_2=tf.layers.conv2d(conv1_1,filters=12,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
pool1=tf.layers.max_pooling2d(conv1_2,pool_size=4,strides=2,padding='same')

dropout1=tf.nn.dropout(pool1,keep_prob=keep_prob)

conv2_1=tf.layers.conv2d(dropout1,filters=24,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
conv2_2=tf.layers.conv2d(conv2_1,filters=48,kernel_size=4,strides=1,padding='same',activation=tf.nn.relu)
pool2=tf.layers.max_pooling2d(conv2_2,pool_size=4,strides=2,padding='same')
print pool2.shape
reshape1=tf.reshape(pool2,[-1,4800])
print reshape1.shape
dropout2=tf.nn.dropout(reshape1,keep_prob=keep_prob)

dense1=tf.layers.dense(dropout2,units=62)

loss = tf.losses.softmax_cross_entropy(onehot_labels=y,logits=dense1)
step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
accuracy = tf.metrics.accuracy(labels=tf.argmax(y,axis=1),predictions=tf.argmax(dense1,axis=1))[1]


plt.ion()
plt.show()

x_draw=[]
y_draw=[]

weight_path="./result/tf/weights.w"
weight_path_index="./result/tf/weights.w.index"


saver = tf.train.Saver()

with tf.Session() as sess:

    sess.run([tf.global_variables_initializer(),tf.initialize_local_variables()])

    if os.path.exists(weight_path_index):
        saver.restore(sess, weight_path)


    train_batch_size = 100
    test_batch_size = 100

    x_axis=0

    for i in range(50*50):
        X_train, y_train = data.next_batch(train_batch_size, 'train')
        _,loss_val,accuracy_val=sess.run([step,loss,accuracy],feed_dict={X:X_train,y:y_train,keep_prob:0.7})
        print("train\tloss_val=>" + str(loss_val) + "\t\taccuracy_val=>" + str(accuracy_val))

        if i%50==49:
            X_test, y_test = data.next_batch(test_batch_size, 'test')
            loss_val,accuracy_val=sess.run([loss,accuracy],feed_dict={X:X_test,y:y_test,keep_prob:1})
            print("test\tloss_val=>"+str(loss_val)+"\t\taccuracy_val=>"+str(accuracy_val))

            x_draw.append(x_axis)
            y_draw.append(accuracy_val)
            x_axis+=1

            plt.title("tf")
            plt.plot(x_draw, y_draw, color='b')
            plt.pause(0.1)
            saver.save(sess,weight_path)

    plt.savefig("./result/tf/result.png")

  

# -*- coding: utf-8 -*-

from keras.models import Sequential
from keras.layers import Dense,Flatten,Dropout,Reshape
from keras.layers.convolutional import Conv2D,MaxPooling2D
from keras import backend as K
import matplotlib.pyplot as plt
import os
from input_data import Data
from keras.optimizers import Adam

data=Data('./data/')


def build4(_name):
    model = Sequential(name=_name)

    model.add(Conv2D(input_shape=(40, 40, 3), filters=6, kernel_size=4, strides=1, padding='same', activation='relu'))
    model.add(Conv2D(filters=12, kernel_size=4, strides=1, padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=4, strides=2, padding='same'))

    model.add(Dropout(0.3))

    model.add(Conv2D(filters=24, kernel_size=4, strides=1, padding='same', activation='relu'))
    model.add(Conv2D(filters=48, kernel_size=4, strides=1, padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=4, strides=2, padding='same'))


    model.add(Flatten())
    model.add(Dropout(0.3))

    model.add(Dense(units=62, activation='softmax'))

    model.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy', metrics=['accuracy'])
    return model



# model=build1("x1")
# model=build2("x2")
# model=build3("x3") #收敛快
model=build4("x4")
# model=build5("x5")
# model=build6("x6")
# model=build7("x7")
# model=build8("x8")
# model=build9("x9")
# model=build10("x10")
# model=build11("x11")

print(model.summary())

weight_path="./result/"+model.name+"/weights.w"
if not os.path.exists("./result/"+model.name):
    os.mkdir("./result/"+model.name)

if os.path.exists(weight_path):
    model.load_weights(weight_path)

plt.ion()
plt.show()

x_draw=[]
y_draw=[]

train_batch_size=5000
test_batch_size=100

for i in range(50):
    X, y = data.next_batch(train_batch_size, 'train')
    model.fit(X,y,batch_size=100,epochs=1,verbose=1)
    model.save_weights(weight_path)


    X_test, y_test = data.next_batch(test_batch_size, 'test')
    loss, accuracy = model.evaluate(X_test,y_test,batch_size=test_batch_size)

    print("epoch"+str(i)+",accuracy=>"+str(accuracy))

    x_draw.append(i)
    y_draw.append(accuracy)

    plt.title(model.name)
    plt.plot(x_draw,y_draw,color='b')

    plt.pause(0.1)

plt.savefig("./result/"+model.name+"/result.png")
''''''

  

 

posted @ 2017-09-21 19:11  otwos  阅读(440)  评论(0编辑  收藏  举报